我想使用原始套接字发送数据包。
如果我创建了一个IP数据包(icmp,tcp或udp数据包),那么源和目标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 :(得分:0)
BSD的答案是rip_output():
1 的源代码中的注释“如果用户递给我们一个完整的数据包,请使用它。否则,为头部分配一个mbuf填写“[即,从提供给sendto()
的地址。”
对于其他系统,您将不得不阅读一些内核源代码。