我正在尝试使用 wireshark 来确定某个程序使用的端口。如果我们在同一个网络上,该程序可以正常连接到服务器,但我显然需要在防火墙上转发端口才能在办公室外使用它。
我打开 wireshark,尝试建立从程序到 192.168.1.6 的连接。然后我查看往返于 192.168.1.6 的数据包。
它们都是 TCP 并且说:
Source: 192.168.1.130
Dest: 192.168.1.6
Service: TCP
Info: 49716 > 808 [PSH, ACK] Seq=1102 Ack=395 Win=65304 Len=87
或者一些其他方式
Source: 192.168.1.6
Dest: 192.168.1.130
Service: TCP
Info: 808 > 49710 [ACK] Seq=2 Ack=320 Win=254 Len=0
我的问题是:
我认为这只是端口 808,另一个端口(源端口)偶尔会在 49710 和 49716 之间变化,这是什么意思?
另一方的流量是否属于开放连接的一部分?或者我是否需要确保客户端 PC 也有端口 808 连接到其 PC?
答案1
对于不需要特定源端口的应用程序,源端口往往落在临时范围内,> 49152。更多信息这里。
只要防火墙是“有状态的”,换句话说,只要跟踪连接并识别来自同一 TCP 流的数据包作为同一流的一部分(绝大多数现代防火墙都这样做),您只需要允许一个方向的连接(到端口 808)。
答案2
目标端口是程序连接到的服务器上的端口,在本例中为 TCP 端口 808。如果您希望外部用户能够连接到防火墙后面的服务器,则需要在防火墙中创建一条规则,允许外部连接入站到服务器的端口 808。您很可能还需要创建一个 NAT 规则,将您的一个可路由(公共)IP 地址转换为服务器的不可路由(私有)IP 地址。客户端的端口是从临时端口池中分配的,每次程序与服务器建立新连接时,端口大多会有所不同。客户端和服务器之间的连接是一个 4 元组,由源 IP 地址/端口和目标 IP 地址/端口组成。根据入站规则,从服务器到客户端的已建立会话的流量不需要特别允许通过防火墙(不需要出站规则),因为它是已建立会话的组成部分。
答案3
我认为其他发帖人已经回答了您的两个(或多或少)“概念性”问题,但实际上,在 Windows 上,您可以运行netstat -aon | find ":<portnumber>"
它将告诉您进程 ID。然后,您可以使用任务管理器(我相信在“视图”>“选择列”下添加了“进程 ID”列)来确定哪个进程正在侦听某个端口。
还,TCP查看器Sysinternals 的运行良好。