netstat是Windows下定位端口占用的首选工具,需以管理员身份运行才能查看系统进程PID;执行netstat -ano | findstr ":端口号"可精准过滤,再用tasklist查进程名,PowerShell命令可一键获取TCP端口与进程信息。

当开发服务启动报错提示“Address already in use”或网页打不开怀疑80端口被占时,必须快速定位是哪个程序在监听或连接该端口——netstat命令是Windows原生、免安装、即时响应的首选工具。
以管理员身份打开命令提示符
按 Win + R → 输入 cmd → 按 Ctrl + Shift + Enter(不是回车)→ 点击“是”允许提权。不加管理员权限会导致部分系统进程PID不可见,【PID为4的System进程及其托管服务将完全不显示】。
这一步不能跳过,普通CMD窗口查不到IIS、SQL Server、Hyper-V等核心服务占用的端口。
查看所有监听和活动连接
在已提权的CMD中执行:netstat -ano。
输出中重点关注三列:本地地址(含冒号后端口号)、状态(LISTENING表示正被监听,ESTABLISHED表示已连上)、最右一列PID。UDP条目无状态字段,只看本地地址和PID即可。
注意:0.0.0.0:80 和 [::]:80 是IPv4与IPv6双栈监听,都得算;127.0.0.1:3000只对本机生效,不影响外部访问。
精准过滤目标端口
方法一:直接管道过滤(推荐)
执行:netstat -ano | findstr ":8080"(把8080换成你要查的实际端口号)。
通过 handsfree-windows CLI控制 Windows 本机应用 (UIA) 和浏览器 (Playwright) 的引导技能,用于自动化或测试桌面应用。
必须加冒号,否则findstr "80"会匹配到8080、180、8000、3809等所有含“80”的数字,导致误判。
方法二:人工扫描全量列表
执行netstat -ano后,用鼠标拖动滚动条逐行查找,适用于只查1~2个端口且系统连接数少的场景。但若输出超过200行,极易漏看。
根据PID确认具体进程名
第一步:拿到上一步输出末尾的PID数字(例如12345)
第二步:执行:tasklist | findstr "12345"(引号内填真实PID,不要带空格)
输出中的“Image Name”列就是进程文件名,如java.exe、nginx.exe、chrome.exe。如果看到svchost.exe,说明是Windows系统服务托管的子服务,需追加执行:tasklist /svc /fi "pid eq 12345"查具体服务名。
若tasklist | findstr无返回,不是没占用,而是权限不足——请立刻关闭当前CMD,重新用管理员身份打开再试。
一键获取端口+进程名(PowerShell替代方案)
按下 Win + X → 选择“终端(管理员)”或“Windows PowerShell(管理员)” → 执行:Get-NetTCPConnection -LocalPort 8080 | ForEach-Object { $p = $_.OwningProcess; [PSCustomObject]@{Port=$_.LocalPort; State=$_.State; ProcessName=(Get-Process -Id $p -ErrorAction SilentlyContinue).Name; PID=$p} }
这条命令直接输出端口、状态、进程名、PID四字段,无需手动拼接,适合批量排查或写入脚本。但仅支持TCP,UDP端口仍需回到netstat。

















