| 命令 | 工具 | 优点 | 缺点 |
|---|---|---|---|
netstat -ano |
CMD | 最常用,系统自带,信息全面 | 输出格式稍显老旧 |
netstat -ano | findstr "端口号" |
CMD | 快速查找特定端口,效率高 | 需要配合 findstr 命令 |
tasklist | findstr "PID号" |
CMD | 根据 PID 查找具体进程名 | 需要配合 tasklist 命令 |
Get-NetTCPConnection -State Listen |
PowerShell | 功能强大,输出为对象,易于筛选和导出 | 需要 PowerShell 5.0+ |
使用 netstat 命令 (最经典、最常用)
netstat 是一个网络统计工具,功能非常强大,可以显示网络连接、路由表、接口统计等信息。

查看所有监听端口
这是最常用的一组命令,可以看到所有正在被程序监听的端口。
netstat -ano
命令参数解释:
-a: 显示所有连接和监听端口。-n: 以数字形式显示地址和端口号(不进行 DNS 解析),速度更快。-o: 显示拥有该连接的进程 ID (PID)。
输出示例:
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:3306 127.0.0.1:0 LISTENING 5160
TCP 192.168.1.100:5357 192.168.1.1:5357 ESTABLISHED 1234
UDP 0.0.0.0:5357 *:* 1234
解读:

本地地址:IP地址:端口号。0.0.0表示监听所有可用的网络接口。外部地址: 对方连接的地址和端口,如果是0.0.0:0或*:0,表示是监听状态。状态:LISTENING表示正在等待连接。ESTABLISHED表示已建立连接。PID: 进程 ID,这是找出哪个程序在使用该端口的关键。
快速查找特定端口
如果你只想知道某个特定端口(8080)是否被占用,可以使用 findstr 命令来过滤输出。
netstat -ano | findstr "8080"
输出示例:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 8888
这行输出告诉我们,8080 端口正在被 PID 为 8888 的进程监听。
根据进程 ID 查找进程名
知道了 PID 之后,你可以使用 tasklist 命令来查看这个 PID 对应的进程名(.exe 文件)。

tasklist | findstr "PID号"
示例:
假设上一步查到的 PID 是 8888,那么命令就是:
tasklist | findstr "8888"
输出示例:
java.exe 8888 Console 1 56,524 K
这告诉我们,占用 8080 端口的是 java.exe 进程。
使用 PowerShell 命令 (更现代、更强大)
在 Windows 10/11 和 Windows Server 2025 及更高版本中,PowerShell 是更推荐的工具,它的命令可以输出结构化对象,方便后续处理。
查看所有监听的 TCP 端口
Get-NetTCPConnection -State Listen
命令参数解释:
-State Listen: 只显示处于“监听”状态的连接。- 这个命令会返回一个对象,其中包含了
LocalAddress,LocalPort,OwningProcess(PID) 等丰富的属性。
输出示例:
LocalAddress LocalPort RemoteAddress RemotePort State AppliedSetting OwningProcess
------------ --------- --------------- ---------- ----------- --------------- -------------
0.0.0.0 80 0.0.0.0 0 Listen Internet 4
0.0.0.0 443 0.0.0.0 0 Listen Internet 4
127.0.0.1 3306 0.0.0.0 0 Listen Internet 5160
查找特定端口并获取进程信息
PowerShell 的优势在于可以将管道()和 Where-Object 结合使用,实现更灵活的筛选。
查找特定端口(8080):
Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -eq 8080}
查找特定端口并显示进程名(一行搞定):
这是 PowerShell 最方便的地方,我们可以通过管道将 PID 传递给 Get-Process。
Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -eq 8080} | ForEach-Object {Get-Process -Id $_.OwningProcess}
输出示例:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
123 5 56000 120000 5.5 8888 1 java
这直接告诉你,8080 端口被 java 进程(PID: 8888)占用。
如何关闭占用端口的进程?
当你找到占用端口的进程后,如果需要关闭它,可以使用 taskkill 命令。
语法:
taskkill /PID 进程ID /F
参数解释:
/PID: 指定要终止的进程 ID。/F: 强制关闭,即使程序没有响应也强制关闭,建议在必要时使用。
示例:
要关闭上面例子中 PID 为 8888 的 Java 进程:
taskkill /PID 8888 /F
注意: 强行终止进程可能会导致数据丢失或程序异常,请谨慎操作,在执行前,请确保你知道这个进程是什么,以及关闭它是否会影响系统。
总结与建议
- 快速查询: 在 CMD 中使用
netstat -ano | findstr "端口号"是最快的方法。 - 全面了解: 在 CMD 中使用
netstat -ano查看所有端口,再结合tasklist查找进程名。 - 现代脚本/高级用户: 强烈推荐使用 PowerShell,其命令更简洁、功能更强大,输出更易于处理和自动化,特别是
Get-NetTCPConnection | ForEach-Object {Get-Process -Id $_.OwningProcess}这种链式操作非常高效。
