在Windows上找出监听TCP或UDP端口的进程的方法

在Windows上找出监听TCP或UDP端口的进程的方法

技术背景

在Windows系统中,有时需要确定哪个进程正在监听特定的TCP或UDP端口,这对于解决端口冲突、排查网络问题等场景非常有用。以下介绍多种查找监听端口进程的方法。

实现步骤

PowerShell方法

TCP

使用以下命令查找监听特定TCP端口的进程:

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

此命令会显示进程的多列信息,若要使用taskkill /PID <pid>杀死进程,需要用到Id列的PID。

UDP

使用以下命令查找监听特定UDP端口的进程:

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

获取所有监听TCP端口的进程信息

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

获取所有监听UDP端口的进程信息

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

cmd方法

基本的netstat命令

1
netstat -a -b

参数说明:

  • -a:显示所有连接和监听端口。
  • -b:显示创建每个连接或监听端口所涉及的可执行文件。
  • -n:以数字形式显示地址和端口号。
  • -o:显示每个连接关联的进程ID。

可以添加-n参数以加快执行速度,避免解析主机名。

查找特定端口的监听进程

1
netstat -ano | findStr "YourPortNumberHere"

此命令会显示监听特定端口的进程的PID。

根据PID查找进程名称

1
tasklist /fi "pid eq YourPIDHere"

使用一个命令获取PID和进程名称

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

若要跳过标题和命令提示符的返回信息,可以使用:

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

GUI工具方法

Resource Monitor

可以通过以下方式打开资源监视器:

  • 开始菜单 -> 所有程序 -> 附件 -> 系统工具 -> 资源监视器。
  • 运行resmon.exe
  • 从任务管理器 -> 性能选项卡打开。

TCPView

可以使用TCPView工具,它是一个图形化界面工具,能方便地查看端口监听情况。

Currports

Currports工具可以帮助搜索和过滤端口监听信息。

核心代码

PowerShell

1
2
3
4
5
6
7
8
9
10
11
12
# 查找监听特定TCP端口的进程
Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess
# 查找监听特定UDP端口的进程
Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess
# 获取所有监听TCP端口的进程信息
Get-NetTCPConnection -State Listen | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort
# 获取所有监听UDP端口的进程信息
Get-NetUDPEndpoint | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort

cmd

1
2
3
4
5
6
7
8
# 基本的netstat命令
netstat -a -b
# 查找特定端口的监听进程
netstat -ano | findStr "YourPortNumberHere"
# 根据PID查找进程名称
tasklist /fi "pid eq YourPIDHere"
# 使用一个命令获取PID和进程名称
for /f "tokens=5" %a in ('netstat -aon ^| findstr YourPortNumberHere') do tasklist /FI "PID eq %a"

最佳实践

  • 如果需要快速查找特定端口的监听进程,使用netstat -ano | findStr "YourPortNumberHere"命令结合tasklist /fi "pid eq YourPIDHere"命令。
  • 如果需要获取更详细的进程信息,建议使用PowerShell命令。
  • 如果喜欢图形化界面,可以使用TCPView或Resource Monitor工具。

常见问题

权限问题

使用netstat -b参数时,需要有足够的权限,否则命令会失败。可以以管理员身份运行命令提示符来解决此问题。

命令执行缓慢

使用netstat -a -b命令时,由于要解析主机名和显示可执行文件信息,可能会比较耗时。可以添加-n参数以加快执行速度。


在Windows上找出监听TCP或UDP端口的进程的方法
https://119291.xyz/posts/2025-05-09.find-process-listening-on-port-in-windows/
作者
ww
发布于
2025年5月9日
许可协议