我有一个源正在发送带有无效校验和标头的 UDP 数据包,而我无法控制该源。我可以在 wireshark 上看到这些数据包正在到达目标主机,但由于 UDP 校验和无效,应用程序没有拾取它们。我希望主机(Windows Server 2012)上的应用程序接收这些数据包并使用有效的校验和重新发送它们,以便应用程序拾取数据包。
我曾尝试使用带有 SocketType RAW 和 ProtocolType IP 的 .NET Socket 对象,但它也忽略了数据包。
答案1
您使用 RAW 套接字的方法实际上与您的需要相差不远。
最有可能的是,你的系统已将 UDP 校验和卸载到网卡上,这意味着 NIC 正在执行校验和验证在操作系统看到数据包之前。这对于性能来说非常好,但是也意味着在您的情况下,您实际上没有选择来获取这些数据包。
不幸的是,确定此功能是否已启用在每个操作系统上都有所不同。在 Linux 上,您可以使用ethtool
命令行进行检查(据我所知没有 GUI 方法)。在 Windows 上,它隐藏在 NIC 驱动程序属性的高级选项卡中(尽管您可能甚至无法在那里看到或控制它,这取决于驱动程序)。