Networking 精心编制的数据包的目标IP与原始套接字发送()的目标IP参数之间的差异
我想使用原始套接字发送数据包 如果我创建一个IP数据包(icmp、tcp或udp数据包),那么源IP和目标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,
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()
”的地址开始]
对于其他系统,您必须阅读一些内核源代码
我觉得你的回答和我的问题之间没有太大关系