gpt4 book ai didi

c++ - 启用 Windows Base Filtering Engine 服务后,为什么我的应用程序无法接收 UDP 数据包?

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:12 48 4
gpt4 key购买 nike

在开始之前,我只想说这种情况使用 TCP 完美,没有任何问题 - 问题是我想自动检测网络上的设备,所以我仍然需要UDP 通过我的网络广播和检测设备。

我有一个简单的 UDP 广播/发送/接收程序在我的笔记本电脑和台式机上运行,​​使用 UDP 和 SDL_Net,用 C++ 编码。我的台式机运行的是 Linux,而笔记本电脑运行的是 Windows。 Linux 机器可以接收所有 UDP 数据包,而 Windows 机器则丢弃它们。我安装了 Wireshark,机器确实收到了数据包——它们只是从未到达我的应用程序:(

经过深思熟虑,我将问题缩小到 Base Filtering Engine 服务,当禁用该服务时,我的程序运行完美!当服务被禁用时,所有 UDP 数据包(广播或定向)都会在两台机器上接收。虽然这对于测试目的来说很好,但我想知道我的应用程序是否甚至可以在启用了 BFE 的客户端计算机上工作(我打赌 90% 的 Windows 计算机都启用了)。

是否有替代的跨平台网络堆栈可用于缓解此问题?是否有任何简单的解决方案来使用基本过滤引擎“注册”我的应用程序?

最佳答案

您是否在发送查询的同一端口上监听响应?响应您的广播查询的机器是否正在将它们的响应发送到它们从中接收它的相同源地址和端口号?

通常防火墙会自动允许您在发送数据的任何端口上接收数据,尽管我不确定这对广播的效果如何。

另请记住,当您首次在 Vista 或 7 下运行 EXE 时,系统可能会询问您是否要允许该程序在网络上进行通信。如果您回答“允许”以外的任何其他问题(包括关闭对话框),那么该 EXE 或使用相同路径名的任何其他 EXE 将被永久阻止。

虽然您提到防火墙以某种方式被“移除”,但这显然不是真的,因为 BFE 仍然存在:基本过滤引擎是 Windows 防火墙的一部分。如果防火墙的某些部分缺失,例如询问是否允许 EXE 的部分,则自动允许规则可能无法正常工作。

撇开自动规则不谈,为了接收传入流量,您或您的用户需要打开适当的防火墙端口。如果您的程序以管理权限运行,您可以通过编程方式打开端口,但这并不容易,并且需要不同的 API,具体取决于您运行的是 XPSP2、Vista 还是 7。

一般来说,Windows 自 XPSP2 以来一直在运行防火墙(即使用户认为他们已将其禁用),最佳做法是通知用户需要在安装时打开任何需要打开的端口。

但首先要确保您在同一个 UDP 端口上发送和接收,并在一个全新的、未修改的 Windows 系统上进行测试。

关于c++ - 启用 Windows Base Filtering Engine 服务后,为什么我的应用程序无法接收 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9602147/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com