命令是干什么的
Get-NetTCPConnection 用对象方式呈现本机 TCP 连接视图:监听、已建立、TIME_WAIT 等状态都能按条件筛选,还能按远端地址分组统计连接分布。相比 netstat -ano 的文本输出,它的结果可排序、可分组、可直接取字段,更适合写进排查脚本。
OwningProcess 是关键字段
每条连接都带 OwningProcess 字段,指向持有该连接或监听端口的进程 ID;把它接到 Get-Process 就能立刻定位是哪个程序在占用端口,省掉手工比对 PID 的步骤,这是排查端口冲突最直接的路径。
基本信息
| 适用平台 | Windows 8 / Server 2012 及以后(NetTCPIP 模块) |
|---|---|
| 语法 | Get-NetTCPConnection [-State Listen|Established] [-LocalPort N] [-RemoteAddress 地址] |
| 关键字段 | LocalAddress、LocalPort、RemoteAddress、RemotePort、State、OwningProcess |
| 配套命令 | Get-NetUDPEndpoint 查看 UDP 端点;Get-Process 按 PID 定位程序 |
典型使用场景
- 排查端口占用:找出谁在监听 8080 并拿到对应进程名
- 统计连接分布:按远端地址分组,看某个外部服务开了多少条连接
- 确认服务是否真的在监听预期端口,这是防火墙放行前的第一步
- 排查异常外联:筛出大量 ESTABLISHED 或可疑远端地址
- 核对 TIME_WAIT 堆积情况,评估短连接压力
常用示例
常用示例
Get-NetTCPConnection -State Listen | Sort-Object LocalPort # 列出全部监听端口
Get-NetTCPConnection -LocalPort 8080 # 查 8080 的全部连接
Get-NetTCPConnection -State Established | Group-Object RemoteAddress -NoElement | Sort-Object Count -Descending
Get-NetTCPConnection -State Listen | Select-Object LocalPort, OwningProcess, @{n='Proc';e={(Get-Process -Id $_.OwningProcess).ProcessName}}字段读法
| 字段 | 含义 | 判读 |
|---|---|---|
| LocalAddress | 本端地址 | 0.0.0.0 表示所有网卡,127.0.0.1 仅本机可连 |
| LocalPort | 本端端口 | 监听状态下即服务端口 |
| RemoteAddress | 对端地址 | 按它分组可看连接分布 |
| RemotePort | 对端端口 | 常见为 443、3306 等目标服务端口 |
| State | 连接状态 | Listen、Established、TimeWait 等 |
| OwningProcess | 持有连接的进程 ID | 直接接 Get-Process 定位程序 |
输出含 OwningProcess,可直接接 Get-Process 定位程序;这是它比 netstat 更省事的地方,也是排查端口冲突的首选路径。
连接数多时输出很大,先加 -State 或 -LocalPort 筛选;短连接场景单次快照不具代表性,需要高频采样。另外,判断端口是否对外可达要看清监听地址:0.0.0.0 表示对所有网卡开放,具体 IP 则只在该地址上响应,排查本机连得上而远端连不上时先看这一列。同一端口出现大量 TimeWait 时,可结合连接建立频率判断是否存在短连接风暴。