为什么 Windows 防火墙要求解除阻止没有传入连接的应用程序

为什么 Windows 防火墙要求解除阻止没有传入连接的应用程序

我有一个连接到许可证服务器的应用程序。该应用程序触发允许在 Windows XP 及更高版本上进行连接的请求。无论我阻止还是取消阻止该应用程序,它都会获得许可证。规则似乎是正确的(拒绝和允许)。

默认情况下,Windows 防火墙允许传出连接并禁止所有传入连接。我将 Windows 防火墙重置为默认设置。所以这应该没问题。

使用 Sysinternals 的 TCPView,我看不到应用程序打开任何监听端口。

使用 Wire Shark 我可以确认,我没有忽略任何对于 TCPView 来说发生得太快的事情。

因此,Windows 防火墙不应该请求权限。但它却请求了!为什么?

答案1

再次查看 Wire Shark 捕获,我发现该应用程序使用端口映射请求来获取实际许可证服务器的端口。该端口映射请求使用(看似随机的)源端口以下1024 - 这是不寻常的,或者可能是完全错误的。端口映射器会及时响应该端口。举个例子,假设客户端和服务器之间的对话如下所示:

源:Client.Domain:1001 目标:Server.Domain:111 数据:“我在哪里可以找到许可证服务器?”

源:Server.Domain:111 目标:Client.Domain:1001 数据:“在端口 12345。不客气。”

111 是 Portmapper 的知名端口。没关系。1001 低于 1024,这对于源端口来说似乎不寻常。

第一个猜测

Windows 防火墙似乎遵循一个简单的逻辑:如果有东西与某个低于 1024 的本地端口通信,则它是传入的,我必须请求许可。因此会弹出窗口。

第二个猜测

在 Windows 防火墙实际丢弃数据包之前,它会进行更仔细的检查,并识别出该连接实际上是由本地进程发起的。因此,它被识别为传出连接并被允许(无论用户回答什么,因为创建的规则仅适用于传入数据包)

相关内容