如何查找程序使用的端口?

我尝试确定一个特定程序在发送数据到互联网时使用的端口。有没有工具可以找出这个信息?还是我需要使用Wireshark进行数据包检查?

背景:我试图在我的Fritz!Box 7490路由器上创建一个优先规则,以便某些电脑游戏被视为实时应用程序,并且在我在线游戏时尽可能减少延迟,例如,如果网络中的其他人决定在YouTube上观看视频。


在大多数情况下,除非你明确关闭了端口,否则并不需要为程序打开端口。大多数消费级路由器并不会这样做。 - Ramhound
我需要指定我的电脑游戏使用的端口范围,这样我才能将该游戏选择为优先规则。这就是为什么我需要知道端口号。 - Black
Netstat应该能告诉你哪些端口正在被使用。不过,你可能需要运用一些侦探推理来弄清楚。Wireshark也可以使用。大多数有文档记录的程序也会列出使用了哪些端口。 - Ramhound
在Google上搜索“游戏名称”端口转发。你会找到需要打开的确切端口。这些是游戏使用的常见引擎端口,所以并不难弄清楚。 - LPChip
2此外,打开次要端口并不能改善延迟问题。一旦端口被打开,它就会保持开放状态,而延迟是在游戏进行过程中发生的,并不是在开始时出现的。 - LPChip
程序在运行时也可以打开随机的端口... - DavidPostill
1我不尝试进行端口转发。我试图设置QoS...我已经通过使用Wireshark找到了端口。它显示目标端口为27022。 - Black
3个回答

  1. 确定您的程序的进程标识符(PID)

    tasklist | find "myprogram.exe"
    
  2. 检查输出结果的第三列端口信息

    netstat /a /n /o | find " 4564"
    
    • 在PID前面加一个空格,以排除来自其他列的不适当匹配(一个小技巧)
    • /n参数将地址保持为数字形式(无需解析),这样命令就能快速完成(对您的需求而言应该足够)

或者你可以使用/b标志来在netstat中列出可执行文件的名称。然而,请注意它只会列出你有权限访问的可执行文件(除非你以管理员身份运行)。 - Moshe Katz
@MosheKatz - /b标志对于这种情况不适用,因为使用了简单的过滤器find。如果有人想要浏览完整列表或使用一些高级行过滤技术,那么他们可以选择/b,但是否则/o更加方便。 - miroxlav
我还有一个问题:netstat显示GTA5.exe使用UDP端口6672、17185和52164。为什么Rockstar没有提到17185和52164呢?而且为什么他们说我们还需要UDP端口61455、61457、61456和61458以及TCP 80、443,尽管netstat没有显示这些端口呢?我很困惑。我指的是这篇文章:https://support.rockstargames.com/hc/de/articles/200525767-GTA-Online-Verbindungsprobleme - Black
@Black - 也许你可以将这个问题发布为一个新的提问,这样才能吸引到能够正确回答的观众。无论是在这个网站上还是在gaming.stackexchange.com上。也许那里已经有人解答过了,或者你也可以尝试搜索一下。 - miroxlav
@miroxlav 我在互联网上搜索了很长时间,但没有找到官方答案。我猜我得向摇滚巨星的支持团队提问,但根据我的经验,他们会故意回避和逃避回答,不管出于什么原因。 - Black

如果你使用的是Windows系统,你可以使用免费工具“Process Explorer”来完成这个操作 - 当然还有其他很多功能。不过,请确保以管理员模式运行它。

enter image description here


如果你想要优化像游戏或Netflix流媒体这样的东西,那么你不需要担心计算机上的端口 - 那是客户端,并且(在某种程度上)是从较高范围的端口中随机选择的。你想要做的是找出你连接到的服务所提供的端口(或端口),并优化与这些端口的连接,以便从你的机器上进行连接(可能通过MAC地址?或本地LAN IP)。 大多数游戏服务器浏览器都会显示端口信息,或者你可以随时连接到任何服务,然后打开一个终端窗口(开始 -> cmd.exe),使用netstat命令来查找哪些程序正在连接到哪些IP地址上的哪些端口。这里有一个链接指向Windows版本的文档 - https://commandwindows.com/netstat.htm