C# HttpListener 和 Windows 防火墙

5
我正在处理的其中一个程序内置了一个Web服务器,仅用于处理非常特定的请求(静态)。与TcpListener不同的是,启动HttpListener时,用户不会被提示允许程序监听哪些网络。这导致了一个大问题,因为该程序需要监听远程连接,但现在被Windows防火墙拒绝了。
如果我在Windows防火墙中创建一个新规则,并在“程序和服务”下选择我的程序,Windows仍然会拒绝所有远程连接……但是如果我选择“满足指定条件的所有程序”,那么它就可以正常工作。我的问题是为什么?为什么防火墙在明确选择我的应用程序时会拒绝它?而且为什么用户没有像其他监听器一样收到防火墙安全屏幕提示?

你是否将正确的(调试/发布)版本添加到该配置中?不确定这是否有影响,但可能与位置有关。 - ChrisBint
我正在使用已安装的发布版本(使用部署项目安装程序安装)。 - Wilson212
你尝试直接打开端口了吗? - user887983
端口80在我的启用了DMZ的路由器上是开放的。我有一个良好运行的Apache服务器。如果我创建一个允许所有入站连接通过端口80的防火墙规则,我才能让HttpListener应用程序正常工作。 - Wilson212
1个回答

18
这是因为HttpListener是建立在http.sys之上的,它会代表您的程序监听您指定的端口。

我还没有找到一种方法来允许只有一个程序通过Windows防火墙使用HttpListener,但您可以通过以下方式限制入站规则仅针对系统组件:

  • 在“程序和服务”选项卡中输入system以在“This program”字段中输入
  • 在“协议和端口”选项卡中选择TCP协议类型,并指定要监听的端口

7
对我来说效果很好。你是如何想到把程序命名为“system”的? - Grezzo
我也很想知道哦 ;) - user4729289
@user1638737 - 您的编辑看起来很有用,但可能与作者的意图相冲突。为什么不另外发表一个答案呢? - dbc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接