Networking 精心编制的数据包的目标IP与原始套接字发送()的目标IP参数之间的差异

Networking 精心编制的数据包的目标IP与原始套接字发送()的目标IP参数之间的差异,networking,network-programming,raw-sockets,Networking,Network Programming,Raw Sockets,我想使用原始套接字发送数据包 如果我创建一个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,

我想使用原始套接字发送数据包

如果我创建一个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
更改,将由网络内路由器处理

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


谢谢

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

对于其他系统,您必须阅读一些内核源代码

  • G.R.Wright&W.R.Stevens,《TCP/IP图解法》,第二卷:实施,第1057-1062页

  • 我觉得你的回答和我的问题之间没有太大关系