netstat -ano 与进程关联
netstat 是老派但在任何 Windows 版本上都能用的连接查看命令:加上 -ano 参数后会输出每个连接的进程号,再用 tasklist 按进程号反查进程名,就完成了「连接—进程」的关联。它的优势是兼容性最好、不需要额外组件;劣势是输出是纯文本,需要靠 findstr 过滤。在不能使用 PowerShell 或新命令受限的环境中,这套组合是最可靠的替代方案。
基本信息
| 基本用法 | netstat -ano 显示连接、监听与进程号 |
|---|---|
| 常用参数 | -a 全部连接、-n 数字形式、-o 显示进程号、-p 指定协议 |
| 过滤 | 配合 findstr 筛状态或端口,如 ESTABLISHED、:3389 |
| 反查进程 | tasklist /fi 按进程号查询进程名与内存占用 |
| UDP | netstat -ano -p udp 查看 UDP 端点 |
| 权限提示 | -b 参数需要管理员权限且执行缓慢,排查时优先用 -ano |
典型使用场景
- 在受限环境中快速确认主机是否存在可疑外联
- 确认某个端口被哪个进程监听
- 核对远程桌面或数据库的访问来源
- 没有 PowerShell 可用时的替代排查手段
- 与进程信息结合,为现场快照补充连接维度
查找连接对应进程
查找连接对应进程
netstat -ano | Select-String ESTABLISHED | Select-Object -First 20 # 已建立连接
netstat -ano | Select-String ':3389' # 按端口筛
netstat -ano -p udp | Select-Object -First 20 # UDP 端点
$pids = netstat -ano | Select-String ':4444' | ForEach-Object { ($_ -split ' +')[-1] } | Select-Object -Unique
foreach ($p in $pids) { tasklist /fi ('pid eq ' + $p) } # 按进程号反查进程
tasklist | Select-String 'suspicious' # 反向:先找进程再看连接输出列读法
| 列 | 含义 | 异常信号 |
|---|---|---|
| 协议 | TCP 或 UDP | UDP 也要看,DNS 隧道与部分远控走 UDP |
| 本地地址 | 本机地址与端口 | 0.0.0.0 表示监听全部网卡 |
| 外部地址 | 对端地址与端口,监听行显示为 0.0.0.0:0 | 陌生公网地址加高位端口 |
| 状态 | LISTENING、ESTABLISHED、TIME_WAIT 等 | 大量 TIME_WAIT 说明连接频繁重建 |
| PID | 持有连接的进程号 | 进程已退出或为系统进程时要进一步核对 |
进程号会被复用:从 netstat 拿到 PID 后,用 tasklist 反查时如果没有对应进程,说明进程可能已退出,而这个 PID 正在被新进程使用。判断时务必核对该进程的启动时间。
务必加 -n:不加时 netstat 会做主机名与端口名解析,输出变慢还可能出现解析失败的占位文本,排查时反而更难读。IPv6 地址显示较长,若输出被截断要换用重定向到文件后再查看。