C# HttpListener 和 Windows 防火墙

Posted

技术标签:

【中文标题】C# HttpListener 和 Windows 防火墙【英文标题】:C# HttpListener and Windows Firewall 【发布时间】:2013-07-25 15:46:47 【问题描述】:

我正在开发的其中一个程序有一个内置的网络服务器,仅用于处理非常具体的请求(静态)。与 TcpListener 不同的是,当启动 HttpListener 时,不会提示用户允许程序允许侦听哪些网络。这导致了一个大问题,因为程序需要侦听远程连接,而这些远程连接现在被 Windows 防火墙拒绝。

如果我在windows防火墙中制定新规则,并在“程序和服务”下选择我的程序,windows仍然会拒绝所有远程连接...但是如果我选择“所有满足指定条件的程序”,那么它工作得很好。我的问题是为什么?为什么防火墙在特别选择时拒绝我的应用程序?为什么用户没有像其他侦听器一样收到防火墙安全屏幕提示?

【问题讨论】:

您是否在该配置中添加了正确的(调试/发布)版本。不确定这是否会有所不同,但可能是基于位置的。 我使用的是 Installed Release 版本(随部署项目安装程序一起安装) 你试过直接打开端口吗? 端口 80 在我的路由器上打开并启用了 DMZ。我有一个运行良好的 apache 服务器。只有当我创建一个允许任何和所有传入连接通过端口 80 的防火墙规则时,我才能让 HttpListener 应用程序工作。 【参考方案1】:

这是因为 HttpListener 构建在 http.sys 之上,它将代表您的程序侦听您指定的端口。

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

在“程序和服务”选项卡的“此程序”字段中输入 system 在“协议和端口”选项卡中选择协议类型 TCP 以及您要监听的端口

【讨论】:

对我来说效果很好。你怎么知道程序的名字应该是“system”? 我也很想知道 ;) @user1638737 - 您的编辑看起来很有用,但可能被认为与作者的意图相冲突。为什么不另作回答?

以上是关于C# HttpListener 和 Windows 防火墙的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# HttpListener 提供大文件

使用 C# HttpListener 时无法设置 MIME 类型

SSL 上的 C# HttpListener 完全失败

支持 HTTPS 的 Httplistener

使用 C# HttpListener 处理多个请求

如何在 C# 中的随机端口上创建 HttpListener 类?