繁体   English   中英

为什么“ Wireshark”启动后PF_PACKET RAW套接字会停止丢失数据包?

[英]Why does a PF_PACKET RAW socket stop missing packets after “Wireshark” was launched?

我需要使用RAW套接字接收传入的UDP数据包,该套接字正在使用以下代码段打开:

static int fd;
char *iface;


iface = "eth0";

if ( (fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) < 0 )
{
    perror("socket");
}

if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, iface, strlen(iface)) < 0)
{
    perror("bind");
    exit(EXIT_FAILURE);
}

我发送了100个相同的数据包,然后尝试进行接收和计数。 我使用recv(...)来做到这一点。 仅传送93个数据包,然后recv(...)挂起,等待下一个数据包。 但是,如果我在接收方计算机上运行“ Wireshark”(使用libpcap),并使其在“ eth0”上侦听UDP数据包,则我的应用程序将始终捕获100个数据包,而不会出现任何问题。

我无法理解我实际上在做什么错,为什么“ Wireshark”也影响我的套接字接收器?

PS我已经尝试增加接收缓冲区的大小,但没有成功。

默认情况下,Wireshark使用libpcap将网络接口设置为混杂模式: https : //github.com/the-tcpdump-group/libpcap/blob/735f1f9d3318693f0096be4198d34e9ac0985777/pcap-linux.c#L3528

尝试在代码中添加此setsockopt调用,以查看是否有帮助。

使用libpcap代替重新发明轮子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM