列出 TCP/UDP 连接、监听端口和协议统计,按 PID 找进程。
netstat 读取本机网络栈的连接表、监听端口、以太网计数和路由表。最常用的组合是 -a(全部连接和监听)、-n(数字形式,不做名称解析)、-o(显示 PID),再加 -p tcp 或 -p udp 过滤协议。它适合回答“谁在监听 443、这个连接属于哪个进程、为什么端口没起来”。
边界:它是某一瞬间的快照,不是实时监控;PID 可能被复用,-b 查可执行文件又慢又需要管理员权限。UDP 没有连接状态,-a 才会显示监听项。路由表用 -r 查看,但等价于 route print;更结构化的结果用 PowerShell 的 Get-NetTCPConnection。
Windows 10/11 都保留 netstat。IPv4 和 IPv6 是分开的,-p tcp 不会显示 tcpv6;双栈服务常同时监听 0.0.0.0 和 [::]。输出列名会随系统语言变化,脚本不要解析列名。
# 1. 全部连接和监听,数字形式,带进程 PID
C:\> netstat -ano
# 2. 只看 443 端口;先定位 PID,再用 tasklist 查进程
C:\> netstat -ano | findstr :443
# 3. 显示可执行文件,需管理员权限,且可能较慢
C:\> netstat -abno
# 4. 查看路由表,等价于 route print
C:\> netstat -r
# 5. 查看 TCP 协议统计,判断重传、失败连接是否异常
C:\> netstat -s -p tcp
# 6. 每 5 秒刷新一次以太网计数,观察错误和丢弃
C:\> netstat -e 5
# 7. 只看 IPv6 TCP 连接,双栈排障时避免漏看
C:\> netstat -ano -p tcpv6
-b 报“请求的操作需要提升”是权限不足,用管理员 CMD;即使提权,svchost.exe 也可能只显示宿主进程,需要结合服务列表判断具体服务。tasklist /fi "PID eq 1234" 查进程名和启动时间;隔几分钟再查可能已经是另一个进程。TIME_WAIT 通常是正常的主动关闭残留,不是攻击;大量 CLOSE_WAIT 才更像应用没有关闭连接,需要查应用代码或连接池。*:* 且没有状态,不代表异常;UDP 本身无连接,-a 才能看到监听,-o 仍可给出 PID。findstr :80 会同时匹配 :8080、:8000 等端口;要精确匹配可写 findstr /r /c:":80 ",或先导出再按列筛选。127.0.0.1:端口 时,服务只监听回环,远程连不上是设计如此;要对外提供服务需监听 0.0.0.0 或 [::],并检查防火墙。-p tcp 只显示 IPv4 TCP,双栈环境要同时看 tcpv6;netstat -ano 不带 -p 才不会漏。-e 的计数是网卡累计值,重启后清零;判断当前故障要看增量,不要拿开机以来的总数直接下结论。合上页面,先回答,再展开对照。
netstat -ano 的三个参数各解决什么问题?为什么排障时通常一起用?TIME_WAIT 需要处理吗?CLOSE_WAIT 多说明什么?netstat -p tcp 可能漏掉 IPv6 的监听端口?-a 显示全部连接和监听,-n 用数字避免解析延迟,-o 给出 PID;组合后能快速把端口和进程对应起来。TIME_WAIT 通常是正常的主动关闭残留;CLOSE_WAIT 多说明应用没有关闭连接,需查应用。-p tcp 只选 IPv4 TCP,IPv6 是 tcpv6;双栈环境要同时看或省略 -p。
小程序版
微信扫码,随时查命令