TcpListener.AcceptTcpClient和防火墙

时间:2009-09-12 17:36:43

标签: c# .net networking sockets firewall

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

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

TcpClient client = server.AcceptTcpClient();

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

2 个答案:

答案 0 :(得分:2)

  • 在服务器计算机上,防火墙需要允许客户端连接的端口上的传入连接TcpListener正在侦听的端口。

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

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

如果要更密切地限制此操作,可以绑定TcpClient to a specific port而不是系统分配的端口,并在服务器和客户端上创建防火墙规则,以允许仅从/到此端口的连接。 / p>

答案 1 :(得分:0)

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