如何在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个回答

37

在Windows中通过PID获取端口号非常简单。

以下是步骤:

  1. 运行“搜索” → 输入cmd → 按 Enter 键。

  2. 输入以下命令...

    netstat -aon | findstr [port number]
    

    (注意:不要包括方括号。)

  3. 按下 Enter 键...

  4. 然后,cmd将显示在该端口上运行的服务的详细信息以及PID。

  5. 打开任务管理器,点击服务选项卡,将PID与cmd的PID匹配一致即可。


37

获取与每个连接关联的所有拥有进程ID的列表:

netstat -ao |find /i "listening"

如果想要终止任何已知进程的ID并释放端口,可以使用此命令。

Taskkill /F /IM PID of a process

1
这不涉及监听UDP端口。 - evandrix

30

netstat -aof | findstr :8080 (将 8080 更改为任何端口)


这是一个用于查找指定端口的命令。您可以更改“8080”以查找您需要的端口。

27

要找出哪个特定的进程(PID)正在使用哪个端口:

netstat -anon | findstr 1234

1234是你的进程ID。【打开任务管理器→服务/进程选项卡,查找你的应用程序的PID】


2
需要注意的是,您不需要两次设置“-n”标志。 “-ano”就足够了。 - mwieczorek
有时候端口被占用,我们需要运行以下命令: net stop hns net start hns - Ali Yousefi

26

如果有人需要类似于 macOS 的等效工具,可以使用以下命令:

lsof -i tcp:8080

获取进程的PID后,您可以使用以下命令结束进程:

kill -9 <PID>


是的,但它带有“Windows”标签。标题是“如何在Windows上找出哪个进程正在侦听TCP或UDP端口?” - Peter Mortensen

20

只需打开命令行并输入以下命令(假设您的端口是123456):

netstat -a -n -o | find "123456"

你将看到你所需的一切。
标题包括:
 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

这就像在这里提到的一样。


1
FYI/对于任何感兴趣的人:它可以是 findstr 123456(不带引号)或 find "123456"(带引号)。(@Josh) - Kevin Cruijssen

17

PowerShell

如果你想要一个很好的概述,你可以使用以下命令:

Get-NetTCPConnection -State Listen | Select-Object -Property *, `
    @{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
    | select ProcessName,LocalAddress,LocalPort

然后你会得到这样一张表:

ProcessName              LocalAddress  LocalPort
-----------              ------------  ---------
services                 ::                49755
jhi_service              ::1               49673
svchost                  ::                  135
services                 0.0.0.0           49755
spoolsv                  0.0.0.0           49672

对于UDP, 它是:

Get-NetUDPEndpoint | Select-Object -Property *, `
   @{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
   | select ProcessName,LocalAddress,LocalPort

16
  1. 打开命令提示符 - 开始菜单 → 运行cmd,或者开始菜单 → 所有程序附件命令提示符

  2. 输入

    netstat -aon | findstr '[port_number]'
    

[port_number]替换为您要检查的实际端口号,然后按Enter

  1. 如果该端口正在被任何应用程序使用,则将显示该应用程序的详细信息。列表最后一列显示的数字是该应用程序的PID(进程ID)。请记下此信息。
  2. 输入

    tasklist | findstr '[PID]'
    
    用上一步骤中的数字替换[PID],然后按Enter键。会显示使用您端口号的应用程序名称。

3
在Windows 10系统中:在第2步和第4步中,除非你用双引号替换单引号,否则你的命令将无法正常运行。正确的命令应该是 netstat -aon | findstr "[port_number]"。 - Leonardo Lopez
此解决方案不需要提升权限。谢谢! - Totalys

16

15

Netstat:

  • -a 显示所有连接和监听端口
  • -b 显示可执行文件
  • -n 停止解析主机名(数字形式)
  • -o 拥有进程

netstat -bano | findstr "7002"

netstat -ano > ano.txt 

Currports工具帮助搜索和过滤网络连接


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