【问题标题】:UDP Packet Captured by Wireshark but not ApplicationWireshark捕获的UDP数据包但不是应用程序
【发布时间】:2014-09-05 22:51:43
【问题描述】:

我有一个带有两个以太网适配器的 Windows 8 系统(专门用于测试网络内容)。我正在编写一个应用程序,它将在整个本地网络的 4950 端口上发送 "Are you there?" UDP 广播,然后等待来自 FPGA 板的任何响应,即端口 4951 上的 "Yes I'm here."

问题在于,在 Windows 8 中(也可能在旧版本中),向255.255.255.255 发送广播实际上只选择主网络适配器,但我的应用程序必须向我计算机上的每个网络适配器发送广播。我在 IP 地址169.254.66.143(网络掩码为255.255.0.0)将广播硬编码到我的第二个(非主)NIC,因此应用程序向169.254.255.255 广播,以确定是否有任何板在网络上第二个网卡。

板子本身有一个静态 IP 地址169.254.1.1,所以当我的应用程序通过辅助 NIC 广播时,FPGA 板子接收到广播消息 ("Are you there?")(我可以确认这一点,因为板子会通过串行端口告诉我它收到了以太网广播)。奇怪的是,虽然板子确实在正确的 4951 端口上发回了响应,但我的应用程序从未收到响应,而 Wireshark 在侦听辅助 NIC 时确实看到了响应数据包。

此外,当我在尝试联系任何董事会失败之前和之后运行netstat -s 时,我看到UDP Statistics for IPv4 下的Receive Errors 计数器增加;似乎 Windows 8 丢弃了数据包,因为存在错误,而 Wireshark 接受了数据包(并没有说它有什么问题)。

tl;dr:什么可能导致 Windows 8 丢弃 UDP 数据包,即使 Wireshark 没有显示该数据包有任何问题?

哦,如果有人说“您的 UDP 代码不起作用!”:应用程序正确地听到了来自我的主 NIC 上的板的响应;只有当我将电路板移动到连接到我的辅助 NIC 的路由器时,我的应用程序才会收到响应。

我还禁用了 Windows 防火墙来测试这是否是问题所在;不是。

【问题讨论】:

    标签: c windows-8 udp wireshark


    【解决方案1】:

    确实很奇怪。关闭 Windows 防火墙显然并没有关闭防火墙;我只需要手动将我的应用程序规则从“阻止 UDP”更改为“允许 UDP”,现在一切正常。

    【讨论】:

      【解决方案2】:

      我知道现在回答这个问题已经很晚了。但是,如果这有帮助,请告诉我。

      请以广播方式连续发送一个ARP回复包。如果网络中不存在 ARP,则 Windows 堆栈中不存在数据包状态。你不需要像 100 毫秒那样以一定的延迟发送 arp 请求。

      我遇到了完全相同的问题。在这个方法中,它被纠正了。

      【讨论】:

      • 抱歉,我不再从事该工作,无法对此进行测试。不过,感谢您的帮助!
      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2018-11-28
      相关资源
      最近更新 更多