get-nettcpconnection是windows powershell中用于查询tcp连接状态的原生命令,支持按端口、地址、状态筛选,可关联进程pid、统计连接分布、定位异常ip及多网卡监听情况,适用于server 2012及以上系统。
get-nettcpconnection 是 windows powershell 中原生、高效、权限要求低的网络连接查询命令,特别适合在 server 2012 及以上系统(包括 server 2016/2019/2022)中替代老旧的 netstat,做精准、可编程的连接状态分析。
查指定端口的监听进程(最常用场景)
比如排查 80 端口被谁占用了:
- 运行:
Get-NetTCPConnection -LocalPort 80 | Select-Object LocalAddress, LocalPort, State, OwningProcess | Format-Table -AutoSize - 输出里会看到
OwningProcess列的 PID 值;再用Get-Process -Id [PID]就能查到对应进程名(如svchost、httpd或w3wp) - 注意:若返回空,说明该端口当前没有进程在监听(不是“被占用”,而是“没启用”)
统计各连接状态分布(快速判断异常)
高并发或连接泄漏时,一眼看出问题倾向:
- 运行:
Get-NetTCPConnection | Group-Object -Property State -NoElement - 重点关注
TIME_WAIT(正常但过多可能端口耗尽)、ESTABLISHED(活跃连接数)、CLOSE_WAIT(对方已关闭,本机未释放,常见于应用未正确 close socket) - 如果
TIME_WAIT超过 5 万,而动态端口范围仍是默认 49152–65535(仅 16384 个),就极可能触发“端口耗尽”
按远程地址聚合连接数(定位单点打爆)
适用于排查是否被某个 IP 扫描、攻击或调用过载:
- 运行:
Get-NetTCPConnection | Where-Object {$_.State -eq 'ESTABLISHED'} | Group-Object -Property RemoteAddress | Sort-Object Count -Descending | Select-Object Name, Count -First 10 - 结果会列出连接数最多的前 10 个外部 IP,配合防火墙日志或应用访问日志交叉验证
- 若某 IP 连接数异常高(如上万),且非预期业务来源,需检查是否被恶意利用或客户端重试逻辑缺陷
结合本地地址筛选(多网卡/绑定场景)
当服务器有多个 IP(如内网+公网),需确认服务监听在哪张网卡上:
- 运行:
Get-NetTCPConnection -LocalAddress 192.168.5.100 -State Listen | Select-Object LocalPort, OwningProcess - 可明确知道 192.168.5.100 这个地址上有哪些端口处于监听态
- 若想查所有监听在
0.0.0.0(即任意地址)的端口,用:Get-NetTCPConnection -LocalAddress 0.0.0.0 -State Listen











