【问题标题】:TcpListener.AcceptTcpClient and FirewallTcpListener.AcceptTcpClient 和防火墙
【发布时间】:2009-09-12 17:36:42
【问题描述】:

我有一个 TcpListener 对象在防火墙后面的 4000 端口上运行。显然,为了让外部客户端连接到 TcpListener,需要在防火墙中打开 4000 端口;否则,外部连接请求将无法通过。

我的问题与我接受这样的连接请求时发生的情况有关:

TcpClient client = server.AcceptTcpClient();

TcpClient 使用系统分配的端口号在本地接口上打开。是否必须在防火墙内打开此端口号才能使外部客户端与此 TcpClient 实例通信?如果是这样,是否可以指定要使用的端口号范围以便提前打开它们?或者防火墙是否自动允许在这个系统分配的端口号上进行通信,因为防火墙后面的某些东西(我的服务器,在这种情况下)建立了,即接受了连接?

【问题讨论】:

    标签: c# .net networking sockets firewall


    【解决方案1】:
    • 在服务器计算机上,防火墙需要允许传入连接从客户端连接的端口到TcpListener 正在侦听的端口。

    • 在客户端计算机上,防火墙需要允许传出连接TcpListener 正在侦听的端口,来自客户端连接的端口。

    大多数防火墙(例如,Windows 防火墙)都配置为允许到任何目的地的任何传出连接,因此您只需创建一个规则,允许来自任何来源的端口 4000 上的传入连接。

    如果您想更严格地限制这一点,您可以绑定TcpClient to a specific port 而不是系统分配的端口,并在服务器和客户端上创建防火墙规则以仅允许来自/到此端口的连接。

    【讨论】:

      【解决方案2】:

      在 windows 防火墙中提供端口范围并不容易,但您可以授予整个程序,当您在 windows 防火墙中添加新条目时,选择程序而不是端口并授予您的程序接收所有连接,然后无论您选择哪个端口,它总是被允许的。

      【讨论】:

      • 是的,这是真的。最坏的情况,这可能是我们要走的路。但我认为,如果可能的话,我们的 IT 人员更愿意将其锁定得更严密。
      • 我们也喜欢同样的,但是微软防火墙不允许你指定端口范围,这太奇怪了,我想他们想让我们购买他们的产品 IAS,我不知道那是否有范围设施,我同意其他防火墙确实提供了这样的支持,并且是最好的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2014-07-20
      • 2013-07-25
      • 2016-11-26
      相关资源
      最近更新 更多