2013-06-03 20 views
0

我想使用原始套接字发送数据包。制作数据包的目标IP与原始套接字发送的目标ip参数之间的区别()

如果我创建一个IP数据包(icmp,tcp或udp数据包),则源IP和目的IP位于IP数据包中。现在我想通过以下线路发送它:

memset(&sin, 0, sizeof(sin)); 
    sin.sin_family = AF_INET; 
    sin.sin_addr.s_addr = inet_addr(dst_ip); 
    sendto(sd, packet, 60, 0, (struct sockaddr *)&sin, sizeof(sin)); 

当然dst_ip应该是相同的数据包中的目的IP。

我想知道如果dst_ip不是在数据包中的目标IP相同会发生什么。在我看来,dst_ip用于决定应使用哪个NIC发送数据包。而制作的数据包中的目标IP不会被dst_ip更改,并且将由网络内路由器处理。

我的理解是否正确?还有其他的区别吗?

谢谢!

回答

0

为BSD答案是在源代码中对rip_output(): 一个评论“如果用户递给我们一个完整的数据包,使用它。否则,分配一个的mbuf用于报头和在填写” [即,从地址提供给sendto()]。

对于其他系统,你将不得不阅读一些内核源代码。

  1. G.R. Wright & W.R. Stevens,TCP/IP Illustrated, vol II:The Implementation,pp.1057-1062。
+0

我没有找到你的答案和我的问题之间的强烈关系 – misteryes

+0

@misteryes请参阅编辑。 – EJP

相关问题