相关疑难解决方法(0)

由tcpdump捕获的udp数据包,但socket没有收到

我写了一个rawudp程序,通过原始套接字发送udp数据包,网址为http://www.tenouk.com/Module43a.html.然后我写了一个udp服务器来监听给定端口上的udp数据包.代码如下所示:

...
sd = socket(AF_INET, SOCK_DGRAM, 0);
bind(sd, (struct sockaddr *)&ipaddr, sizeof(ipaddr));
size = recvfrom(sd, msgbuf.text, 2000, 0, (struct sockaddr *)&sin, &sin_len);
... // print the recevied udp packet
Run Code Online (Sandbox Code Playgroud)

当我使用rawudp将udp数据包发送到udp服务器时,如果源IP地址和目标IP地址不同,则可以.但是如果源IP地址和目标IP地址相同,则udp服务器无法接收udp数据包.

我试图使用tcpdump来捕获udp数据包.我发现tcpdump在使用相同的源和目标IP地址时可以显示udp数据包.当源和目标IP地址相同时,似乎udp数据包被丢弃,因此udp服务器中的套接字没有收到它.

以下是一些日志(IP地址已在日志中更新).两种情况之间的唯一区别是源IP地址(192.168.0.26对192.168.0.226).

我陷入了这个问题.有没有人可以帮助我.提前致谢.

udp客户端(rawudp):

case 1> rawudp 192.168.0.26 18321 192.168.0.226 19702 test.bin # using different source and destination ip addresses
size of ip header:  20
size of udp header: 8
read 69 bytes from file test.bin successfully.
socket() - using SOCK_RAW socket and UDP protocol is OK.
setsockopt() …
Run Code Online (Sandbox Code Playgroud)

udp tcpdump raw-sockets

10
推荐指数
0
解决办法
7666
查看次数

标签 统计

raw-sockets ×1

tcpdump ×1

udp ×1