Windows 服务 (TCP Client/Listener) 防火墙异常阻止流量
Windows Service (TCP Client/Listener) Firewall Exception Blocks Traffic
我在网络上的两台机器上有一个基于 TcpClient
和 TcpListener
的 Windows 服务 运行。客户端和服务器节点都从相同的 Windows 服务运行。该服务以 Local System
运行,PC01
是 Win7 x64,PC02
是 Win7 x86。
应用程序在从客户端到服务器的连接尝试中抛出 SocketException
10060(连接超时),我发现应用程序的自动防火墙配置代码生成的 Windows 防火墙异常不允许 TCP 流量通过。
退后一步,我在 PC01
上按顺序尝试了以下测试,并永久禁用了 PC02
上的防火墙以将其作为变量删除:
- 在
PC01
上禁用了防火墙 - 这有效。
- 在
PC01
上启用了防火墙并且 手动 添加了一个例外以允许端口 12345
上的所有入站 TCP
流量 - 这有效。
- 进一步限制例外以仅允许来自本地子网的远程流量 - 这有效。
- 进一步限制例外以仅允许(所有)服务 - 这有效。
- 通过从服务列表中选择或输入服务短名称进一步限制允许特定服务的例外 - 此失败。
- 尝试通过选择
myservice.exe
可执行文件来限制特定服务的异常 - 此 失败。
当例外仅限于特定服务时,我的 Windows 服务有什么问题会阻止它工作? Windows 服务是否有我应该注意的警告?是否为所有服务开放端口是唯一的解决方案?
编辑:我使用 netstat -a -n -b
来收集有关活动连接和侦听端口的信息。以下摘录详细介绍了有关我的服务的信息:
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:12345 0.0.0.0:0 LISTENING
[myservice.exe]
...
UDP 0.0.0.0:12344 *:*
[myservice.exe] (listening for UDP broadcast packets)
...
UDP 0.0.0.0:62794 *:*
[myservice.exe] (this is an outbound broadcast packet)
感谢大家提供的任何见解。
为了选择一个特定的可执行文件来工作,可执行文件的路径必须与防火墙期望的路径相匹配。显然,出于某种原因,防火墙 GUI 正在转换路径,因此它是相对于 %USERPROFILE%
的;我怀疑这构成了 Windows.
中的错误
(如果我没记错的话,防火墙通常可以处理使用环境变量的路径,例如 %SystemRoot%
,但显然每个用户的环境变量将不起作用,因为防火墙规则是未在正确的用户上下文中进行评估。)
我在网络上的两台机器上有一个基于 TcpClient
和 TcpListener
的 Windows 服务 运行。客户端和服务器节点都从相同的 Windows 服务运行。该服务以 Local System
运行,PC01
是 Win7 x64,PC02
是 Win7 x86。
应用程序在从客户端到服务器的连接尝试中抛出 SocketException
10060(连接超时),我发现应用程序的自动防火墙配置代码生成的 Windows 防火墙异常不允许 TCP 流量通过。
退后一步,我在 PC01
上按顺序尝试了以下测试,并永久禁用了 PC02
上的防火墙以将其作为变量删除:
- 在
PC01
上禁用了防火墙 - 这有效。 - 在
PC01
上启用了防火墙并且 手动 添加了一个例外以允许端口12345
上的所有入站TCP
流量 - 这有效。 - 进一步限制例外以仅允许来自本地子网的远程流量 - 这有效。
- 进一步限制例外以仅允许(所有)服务 - 这有效。
- 通过从服务列表中选择或输入服务短名称进一步限制允许特定服务的例外 - 此失败。
- 尝试通过选择
myservice.exe
可执行文件来限制特定服务的异常 - 此 失败。
当例外仅限于特定服务时,我的 Windows 服务有什么问题会阻止它工作? Windows 服务是否有我应该注意的警告?是否为所有服务开放端口是唯一的解决方案?
编辑:我使用 netstat -a -n -b
来收集有关活动连接和侦听端口的信息。以下摘录详细介绍了有关我的服务的信息:
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:12345 0.0.0.0:0 LISTENING
[myservice.exe]
...
UDP 0.0.0.0:12344 *:*
[myservice.exe] (listening for UDP broadcast packets)
...
UDP 0.0.0.0:62794 *:*
[myservice.exe] (this is an outbound broadcast packet)
感谢大家提供的任何见解。
为了选择一个特定的可执行文件来工作,可执行文件的路径必须与防火墙期望的路径相匹配。显然,出于某种原因,防火墙 GUI 正在转换路径,因此它是相对于 %USERPROFILE%
的;我怀疑这构成了 Windows.
(如果我没记错的话,防火墙通常可以处理使用环境变量的路径,例如 %SystemRoot%
,但显然每个用户的环境变量将不起作用,因为防火墙规则是未在正确的用户上下文中进行评估。)