c# - Windows 服务(TCP 客户端/监听器)防火墙异常阻止流量

标签 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 上启用防火墙并手动添加了一个异常(exception)以允许端口 12345 上的所有入站 TCP 流量- 这奏效了。
  3. 进一步限制异常(exception)以仅允许来自本地子网的远程流量 - 这行得通。
  4. 进一步限制异常(exception)以仅允许(所有)服务 - 这有效。
  5. 通过从服务列表中选择或输入服务短名称进一步限制允许特定服务的异常(exception) - 这失败。
  6. 尝试通过选择 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%,但显然每个用户的环境变量将不起作用,因为防火墙规则未在正确的用户上下文中进行评估。)

关于c# - Windows 服务(TCP 客户端/监听器)防火墙异常阻止流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596739/

相关文章:

c# - Epplus 行和列中的最后一个单元格 - C#

c - tcp 缓冲区中的总数据包长度是否可以超过分配的缓冲区大小?

c# - 无法借助InstallUtil工具安装windows服务

sockets - 套接字的替代品

php - 将 ADFS 2.0 与非 .NET 服务一起使用

c# - EF 4.3 CodeFirst MVC3 WebApp 和控制台使用相同的模型,但不知何故它们 'see' 是导致模型支持错误的不同模型

c# - DispatcherTimer 堆栈 - UWP

c# - 将控件颜色更改为默认值

c# - 如何制作具有多个项目和不同输出的安装程序包?

scalability - 构建 "realtime bidding"广告交易平台需要什么样的软件架构?