urlacl和Windows防火墙

通常我为我的应用程序使用Linux服务器。 所以我对Windows Server的防火墙系统还是比较新的。

我有一个C#应用程序需要作为一个HTTP服务器。 有不同的抽象层次来实现这一点的方法有多种:当然有一个Socket库提供非常基本的function。 对于TCPstream量还有一个TcpClient 。 两者都监听特定的端口,并需要Windows防火墙中定义的“入站规则”才能从另一台机器访问(当您只需从机器访问时,不需要任何规则)。

然后是HttpListener 。 它不按每个端口操作,使用URI前缀来匹配请求。 例如,前缀“http:// *:80 /”将处理所有端口80的httpstream量。

真正让我感到不安的是,为了使HttpListener在Windows防火墙中不需要任何规则,但需要在urlacl中input一个条目:

 netsh http add urlacl url=http://*:80/ user=DOMAIN\user 

(这是一个URL命名空间预留)

实现http服务器的三种方法同样有用。 不同之处在于使用HttpListener时需要的代码less得多。

我的问题是:为什么有一个URL命名空间保留的概念,但未注册的url可以被服务器监听。 为什么可以注册的url绕过防火墙规则? 为什么有一个像这样的系统呢?

AFAIK,net http显示/编辑http.sys的configuration,IIS的内核模式驱动程序部分与Windows激活服务器(WAS)一起也可以由非IIS应用程序使用。 他们只需要注册他们的URL,以便http.sys / WAS可以将请求路由到正确的客户端,并避免冲突。

如果你select实现低级端口监听你自己,你没有使用http.sys,并不需要注册netsh的url,但你仍然需要小心,不会有任何冲突与其他程序。

.NET httpListener类也使用http.sys

至于防火墙规则,我没有看到注册的URL不需要防火墙规则。 您的示例http://*:80/World Wide Web Services filewall规则覆盖。