Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TcpListener.AcceptTcpClient和防火墙_C#_.net_Networking_Sockets_Firewall - Fatal编程技术网

C# TcpListener.AcceptTcpClient和防火墙

C# TcpListener.AcceptTcpClient和防火墙,c#,.net,networking,sockets,firewall,C#,.net,Networking,Sockets,Firewall,我有一个TcpListener对象,它在端口4000的防火墙后面运行。显然,为了让外部客户端连接到TcpListener,需要在防火墙中打开端口4000;否则,外部连接请求将无法通过 我的问题与我接受连接请求时发生的情况有关,如下所示: TcpClient client = server.AcceptTcpClient(); TcpClient在本地接口上以系统分配的端口号打开。为了让外部客户端与此TcpClient实例通信,是否必须在防火墙内打开此端口号?如果是,是否可以指定要使用的端口号范

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

我的问题与我接受连接请求时发生的情况有关,如下所示:

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

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

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

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


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

在windows防火墙中指定端口范围并不容易,但当您在windows防火墙中添加新条目时,您可以授予整个程序,选择program(程序)而不是port(端口),并授予您的程序接收所有连接的权限,然后无论您选择哪个端口,它都将始终被允许。

是的,这是正确的。最坏的情况是,这可能是我们要走的路线。但我认为我们的IT人员更愿意尽可能地将其锁定。我们也希望如此,但Microsoft Firewall不允许您指定端口范围,这绝对奇怪,我认为他们希望我们购买他们的产品IAS,我不知道是否有范围设施,我同意其他防火墙确实提供了这样的支持,而且是最好的。