Wireshark可见UDP包无法被Windows套接字(含原始套接字)捕获问题排查
UDP数据包无法传递至套接字问题
我有一块带FPGA的板卡,通过10G网卡连接至Windows 10主机:板卡静态IP为10.254.210.10,主机IP为10.254.210.11。目前在Wireshark中能看到UDP数据包,但这些包无法传递到套接字。(对应截图:UDP数据包无法通过套接字捕获)
已尝试的操作及结果:
- a) 将UDP服务器套接字绑定到
INADDR_ANY和端口2222。主机的Wi-Fi网卡(IP段192.168.x.x)接口的数据包可被套接字正常捕获,因此排除防火墙问题。(对应截图:UDP数据包可通过套接字捕获) - b) 创建原始套接字并启用混杂模式,仍无法捕获Wireshark中可见的数据包,相关代码如下:
// 启用混杂模式 DWORD dwValue = RCVALL_ON; DWORD dwBytesReturned = 0; if (WSAIoctl(s, SIO_RCVALL, &dwValue, sizeof(dwValue), NULL, 0, &dwBytesReturned, NULL, NULL) == SOCKET_ERROR) { sprintf(err_msg, "设置混杂模式失败: WSAIoctl 返回错误码 %d\n", WSAGetLastError()); printf("Ioctl 执行失败,错误码: %d", WSAGetLastError()); fwrite(err_msg, sizeof(err_msg), 1, fp); closesocket(s); WSACleanup(); exit(EXIT_FAILURE); } puts("Ioctl 执行完成\n");
- c) 通过
netstat查看“UDP Statistics for IPv4”,未发现任何错误。 - d) 板卡发送的数据包中IP校验和与UDP校验和均设为
0000(即已禁用校验和)。
内容的提问来源于stack exchange,提问作者skallurr
相关产品推荐
相关产品推荐

