Windows服务(TCP客户端/侦听器)防火墙例外阻止流量

时间:2015-09-15 22:28:26

标签: c# tcp windows-services windows-firewall

我在网络上的两台计算机上运行了基于TcpClientTcpListener的Windows服务。客户端和服务器节点都使用相同的Windows服务。该服务以Local System运行,PC01为Win7 x64,PC02为Win7 x86。

应用程序在从客户端到服务器的连接尝试期间抛出SocketException 10060(连接超时),我发现应用程序的自动防火墙配置代码生成的Windows防火墙例外不是允许TCP流量通过。

退后一步,我在PC01上按顺序尝试了以下测试,永久禁用PC02上的防火墙,将其作为变量删除:

  1. PC01上禁用了防火墙 - 这很有效。
  2. 启用PC01上的防火墙并手动 添加了一个例外,以允许端口TCP上的所有入站12345流量 - 这都有效。
  3. 进一步限制了例外,只允许来自本地子网的远程流量 - 这很有效。
  4. 进一步限制允许(所有)服务的例外 - 这有效。
  5. 通过从服务列表中选择或输入服务简称来进一步限制例外以允许特定服务 - 此失败。
  6. 尝试通过选择myservice.exe可执行文件来限制特定服务的例外 - 此失败。
  7. 当异常仅限于特定服务时,我的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)
    

    感谢大家提供的任何见解。

1 个答案:

答案 0 :(得分:1)

为了选择要使用的特定可执行文件,可执行文件的路径必须与防火墙所期望的路径相匹配。显然,防火墙GUI由于某种原因正在转换路径,因此它相对于%USERPROFILE%;我怀疑这构成了Windows中的一个错误。

(如果我没记错的话,防火墙一般可以处理使用环境变量的路径,例如%SystemRoot%,但显然每用户环境变量不起作用,因为防火墙规则不会被评估在正确的用户上下文中。)