netstat 的定位
netstat 是 net-tools 时代的经典命令,老系统与部分精简发行版仍在使用。它的输出格式与 ss 有出入,读懂它才能与存量文档、历史截图和旧脚本对齐。
现在的取舍
RHEL 9 与较新 Ubuntu 默认不再预装 net-tools,且连接数很大时 netstat 明显更慢。现场流程通常是先确认工具是否存在,再决定走 netstat 还是 ss。
基本信息
| TCP 全量 | netstat -antp |
|---|---|
| 仅监听 | netstat -lntp |
| UDP | netstat -anup |
| 数字输出 | -n 不解析服务名,提速并避免误读 |
| 进程归属 | -p 只有 root 才能看到全部进程 |
| 权限要求 | 普通用户可查连接,进程归属通常需 root |
典型使用场景
- 老系统或精简镜像上排查网络连接
- 与历史文档、截图里的输出对照
- 确认系统是否安装了 net-tools
- 查看路由表(netstat -rn)与协议统计
- ss 不可用或行为异常时作为替代
常用组合
常用组合
which netstat || echo 'net-tools 未安装' # 先确认工具是否存在
netstat -antp | head -n 30
netstat -lntp
netstat -antp | awk '$6=="ESTABLISHED"' | head -n 20
netstat -rn | head -n 20 # 路由表
netstat -s | head -n 20 # 协议统计:重传与错误计数输出逐列读法
| 列 | 含义 | 正常/异常 |
|---|---|---|
| Recv-Q / Send-Q | 收发队列长度 | 长期非 0 说明处理不过来或连接阻塞 |
| Local Address | 本地地址与端口 | 监听端口应是预期清单内的项 |
| Foreign Address | 对端地址 | 陌生公网地址的已建立连接需核对 |
| State | 连接状态 | 大量 SYN_SENT 说明外连被拦或目标不可达 |
netstat 与 ss 的参数基本可以互译:netstat -antp 对应 ss -antp,netstat -lntp 对应 ss -lntp,netstat -rn 对应 ip route,存量脚本迁移时按此对照。
解析脚本不要按固定列号:加不加 -p、-n 都会改变列数,先用 head 确认格式再写 awk,否则统计全错。
与 ss 结果交叉验证
与 ss 结果交叉验证
netstat -ant | wc -l
ss -ant | wc -l # 两个数字接近说明结果一致
netstat -antp | grep -c 'LISTEN'
ss -lnt | wc -l老系统上的替代做法
- 连接查询用 ss 替代,路由查询用 ip route 替代
- 直接读 /proc/net/tcp 内核连接表,注意十六进制转换
- 用 lsof -i 做进程与连接的关联查询
- 工具缺失时从可信介质带入静态编译版本
仍在用 netstat 的常见原因
- 存量巡检脚本按旧格式解析输出
- 精简镜像未安装 iproute2 或工具被裁剪
- 合规文档要求按固定模板留档
- 与交换机、防火墙侧命令行习惯保持一致