如何在Windows上查找监听TCP或UDP端口的进程?

3244

如何在Windows系统中查找监听TCP或UDP端口的进程?


9
CurrPorts 是一款帮助搜索和筛选的工具。网址为 https://www.nirsoft.net/utils/cports.html。 - Blue Clouds
3
在尝试在IntelliJ下以调试模式运行Tomcat时,我遇到了这个问题。对我来说最好的解决方案是更改调试传输配置(文件->设置->构建/执行/部署->调试器)从“socket”改为“共享内存”。 - TMN
103
将端口号8080替换为其他端口号后,运行命令netstat -aof | findstr :8080 - David Jesus
5
OT: 很有趣看到关于Windows的第一个问题被标记为不相关... - IT M
9
为什么这个问题被关闭了?这是我见过的最直接的问题。 - Glenn Maynard
显示剩余13条评论
34个回答

3707

PowerShell

TCP

Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess

用户数据报协议(UDP)

Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess

命令提示符

 netstat -a -b

(使用-n选项来停止尝试解析主机名,这将使其运行速度更快。)

请注意Dane的建议,使用TCPView非常有用!

-a 显示所有连接和侦听端口。

-b 显示创建每个连接或侦听端口的可执行文件。在某些情况下,知名可执行文件会托管多个独立组件,在这些情况下,显示创建连接或侦听端口所涉及的组件序列。在这种情况下,可执行文件名称在底部的[]中,顶部是它调用的组件,依此类推,直到到达TCP/IP。请注意,此选项可能需要时间,并且如果您没有足够的权限,则会失败。

-n 以数字形式显示地址和端口号。

-o 显示与每个连接关联的拥有进程ID。


170
如果合适的话,使用 /F,并使用 taskkill /PID <pid> 终止进程。 - BitMask777
95
如果您没有足够的权限,可能会收到错误消息。在右键单击cmd.exe时,请使用“以管理员身份运行”选项来作为您的命令行shell。 - Gruber
9
可以正常运行,但需要管理员权限。按住Shift键+右键单击命令图标 -> 以管理员身份运行。 - Christian Bongiorno
26
获取PID(例如为1234)后,您可以使用命令tasklist /fi "pid eq 1234"来查找该进程的名称和其他详细信息。 - Steve Chambers
7
PowerShell命令希望你用你要查找的端口号替换"portNumber"。错误指出"portNumber"不是一个数字。 - MattOG
显示剩余17条评论

2900

Windows有原生的图形用户界面:

  • 开始菜单 → 所有程序附件系统工具资源监视器

  • 或运行resmon.exe

  • 或从任务管理器性能选项卡启动。

输入图像描述


63
同时显示绑定的防火墙状态(最后一列)。非常实用。 - Raphael
10
运行此程序需要管理员权限(或在管理员组中)。 - KrishPrabakar
3
@bcorso,“绑定到未指定地址”是什么意思? - Pacerier
8
在Windows 10中,也可以从任务管理器的“性能”选项卡中启动它(其他版本未经验证)。 - Mathieu K.
12
@user4836454的评论是不正确的:即使没有网络连接到这些端口,资源监视器仍然会显示具有监听器的端口。 只需查看“侦听端口”部分,而不是“TCP连接”部分。 - Jpsy
显示剩余5条评论

322

对于Windows操作系统:

netstat -aon | find /i "listening"

51
请注意,如果您的Windows运行语言与英语不同,您需要将“listening”更改为本地词汇。例如,对于德语,使用命令netstat -aon | find /i "abhören" - Levite
7
在我的情况下,可能由于引号符号的原因它没有起作用,但解决方法"netstat -aon | findstr LISTENING"完美地起到了作用! - The Godfather
这个可以在不需要提升权限的情况下运行,所以被点赞了。 - Vlad Schnakovszki
10
在尝试在Windows 10版本15063.729上使用PowerShell运行此命令时,我遇到了一个错误:FIND: 参数格式不正确 - Nicke Manarin
1
如果在Windows上使用Git Bash,请使用//i而不是/i。 - Ojasvi Monga
1
@PawelCioch,原帖询问的是过程,而不是过程名称。 - golimar

286

如果你需要图形用户界面(GUI)来查看这个,可以使用TCPView。它是微软收购的旧Sysinternals应用程序。


10
根据我的看法,这是最佳选择,特别是因为所有的进程都在同一列表中,您可以通过右键单击直接关闭进程。 - Andreas Lundgren
9
也就是说,这不需要管理员权限! - Janac Meena
1
我喜欢TCPView。自从Windows XP以来,它一直是我的首选! - GTodorov
1
很棒的工具。谢谢分享。 - Jason Huang
哇!现在才发现这个东西。太棒了,是个很厉害的工具。 - Denialos

234

大多数答案中提到的 -b 开关需要您在计算机上拥有管理员权限。实际上,您并不需要提升的权限来获取进程名称!

查找运行在端口号(例如8080)上的进程的pid。

netstat -ano | findStr "8080"

通过进程ID查找进程名称

tasklist /fi "pid eq 2216"

通过TCP/IP端口查找进程


101

如果您运行以下命令,可以获取更多信息:

netstat -aon | find /i "listening" |find "port"

使用“查找”命令可以过滤结果。 find /i "listening" 将只显示处于“侦听”状态的端口。请注意,您需要 /i 来忽略大小写,否则您将输入 find "LISTENING"。 | find "port" 将限制结果仅包含特定端口号。请注意,在此情况下,它也将筛选响应字符串中任何位置具有端口号的结果。


10
尝试在PowerShell v2.0中运行此命令会出现“FIND:参数格式不正确”的错误。您需要在查找条件后添加一个空格。这将使命令变为“netstat -aon | find /i "listening" | find "1234 "”。 - self.
3
请将上面的“port”替换为您的端口号,例如“5000”。 - Judy007
1
@self。即使在管道后添加空格,我仍然在PS 5.1中遇到了那个错误。你知道发生了什么吗? - Nicke Manarin
3
@NickeManarinin和@self,首先要将命令行更改为cmd(只需键入cmd并按Enter键,然后重新运行命令),或者在PowerShell中使用以下命令: netstat -aon |find /i "{back tick}"listening{back tick}"" |find "{back tick}"port{back tick}"" (<- 请注意转义的引号 - 抱歉术语“反引号”因为我不能添加实际字符,因为它会认为它是一个截图) - Tristan van Dam

88
  1. 打开命令提示符窗口(作为管理员):从“开始/搜索框”输入“cmd”,然后右键单击“cmd.exe”,并选择“以管理员身份运行”。

  2. 输入以下文本,然后按回车。

    netstat -abno

    -a 显示所有连接和侦听端口。

    -b 显示创建每个连接或侦听端口的可执行文件。在某些情况下,知名的可执行文件会托管多个独立的组件,在这种情况下,涉及创建连接或侦听端口的组件序列将显示出来。在这种情况下,可执行文件名称位于底部的[]中,在顶部是它调用的组件,等等,直到达到TCP/IP。请注意,此选项可能需要花费很长时间,并且如果您没有足够的权限,它将失败。

    -n 以数字形式显示地址和端口号。

    -o 显示与每个连接关联的拥有进程ID。

  3. 在“本地地址”下找到您正在侦听的端口。

  4. 直接在其下查看进程名称。

注意:要在任务管理器中找到进程

  1. 记下您正在查看的端口旁边的PID(进程标识符)。

  2. 打开Windows任务管理器。

  3. 选择“进程”选项卡。

  4. 查找在步骤1中执行netstat时所注意到的PID。

    • 如果您没有看到PID列,请单击“查看/选择列”,然后选择PID。

    • 确保选择了“显示来自所有用户的进程”。


67

获取进程ID和镜像名称

仅需使用一个命令:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

端口号应该替换为9000

输出将包含以下内容:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

说明:

  • 它遍历以下命令的输出中的每一行:

    netstat -aon | findstr 9000
    
  • 从每行中提取PID(%a - 名称在此不重要),PID是该行中的第5个元素,并传递给下一个命令。

  • tasklist /FI "PID eq 5312"
    

如果你想要跳过头部和命令提示符的返回,你可以使用:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

输出:

java.exe                      5312 Services                   0    130,768 K

2
不错的答案,但是你应该将其更改为findstr :9000,否则你甚至会找到包含数字的应用程序(例如,当你搜索“80”时,你会发现端口80、800、8000上的应用程序)。 - Radon8472

63

首先,我们需要找到要终止的特定任务的进程 ID,以便释放端口:

输入命令

netstat -n -a -o
在Windows命令行提示符(cmd)中执行此命令后,请选择我认为是最后一列的pid。假设这是3312。
现在输入:
taskkill /F /PID 3312

现在您可以通过输入netstat命令进行交叉检查。

注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要执行以下步骤:

从开始菜单->命令提示符(右键单击命令提示符并以管理员身份运行)


在 Git Bash 中,我必须执行 taskkill -F -PID 3312 - Ryu S.

55

在Windows 10或Windows Server 2016上使用PowerShell 5,运行Get-NetTCPConnection命令。我猜它也适用于旧版的Windows。

Get-NetTCPConnection的默认输出由于某些原因不包括进程ID,这有点令人困惑。但是,您可以通过格式化输出来获得它。您需要查找的属性是OwningProcess

  • 如果您想找出监听端口443的进程ID,请运行此命令:

      PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
    
      LocalAddress   : ::
      LocalPort      : 443
      RemoteAddress  : ::
      RemotePort     : 0
      State          : Listen
      AppliedSetting :
      OwningProcess  : 4572
      CreationTime   : 02.11.2016 21:55:43
      OffloadState   : InHost
    
  • 将输出格式化为您寻找的属性表格:

      PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
    
      LocalAddress LocalPort  State OwningProcess
      ------------ ---------  ----- -------------
      ::                 443 Listen          4572
      0.0.0.0            443 Listen          4572
    
  • 如果您想查找进程的名称,请运行此命令:

  •   PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
    
      Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
      -------  ------    -----      -----     ------     --  -- -----------
      143      15     3448      11024              4572   0 VisualSVNServer
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接