netstat 用于显示各种网络相关信息,如网络连接、路由表、接口状态、masquerade 连接、多播成员等。
输出信息含义
执行 netstat 后,输出分为两部分:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 9 [ ] DGRAM 5292 /dev/log
- Active Internet connections(有源 TCP 连接):
Recv-Q和Send-Q是接收/发送队列,正常应为 0,非 0 表示数据包在队列中堆积。 - Active UNIX domain sockets(有源 Unix 域套接字):与网络套接字类似,但只用于本机通信,性能可提高一倍。
Proto是协议,RefCnt是连接进程号,Type是套接字类型,State是当前状态,Path是连接进程使用的路径名。
常见参数
| 参数 | 作用 |
|---|---|
-a |
显示所有选项(默认不显示 LISTEN 相关) |
-t |
仅显示 TCP 相关 |
-u |
仅显示 UDP 相关 |
-n |
拒绝显示别名,能显示数字的全部转为数字 |
-l |
仅列出在 Listen(监听)的服务状态 |
-p |
显示建立相关链接的程序名 |
-r |
显示路由信息(路由表) |
-e |
显示扩展信息(如 uid) |
-s |
按各协议统计 |
-c |
每隔固定时间执行一次 |
提示:LISTEN/LISTENING 状态只有用
-a或-l才能看到。
实用命令实例
列出所有端口
netstat -a # 所有端口(含监听和未监听)
netstat -at # 所有 tcp 端口
netstat -au # 所有 udp 端口
列出监听状态的 Sockets
netstat -l # 所有监听端口
netstat -lt # 监听 tcp 端口
netstat -lu # 监听 udp 端口
netstat -lx # 监听 UNIX 端口
显示每个协议的统计信息
netstat -s # 所有协议统计
netstat -st # TCP 统计
netstat -su # UDP 统计
显示 PID 和进程名称
netstat -p # 添加 PID/进程名称,便于找到特定端口运行的程序
netstat -pt
不显示主机、端口和用户名
netstat -an # 用数字代替名称,加速输出
netstat -a --numeric-ports
netstat -a --numeric-hosts
netstat -a --numeric-users
持续输出
netstat -c # 每隔一秒输出一次网络信息
显示不支持的地址族
netstat --verbose
显示核心路由信息
netstat -r # 路由表
netstat -rn # 数字格式,不查询主机名
找出程序运行的端口
netstat -ap | grep ssh # 查看 ssh 相关连接
netstat -an | grep ':80' # 找出运行在 80 端口的进程
注意:不是所有进程都能找到,无权限的不显示,用 root 权限可查看所有信息。
显示网络接口列表
netstat -i # 接口列表
netstat -ie # 接口详细信息(类似 ifconfig)
IP 和 TCP 分析
查看连接某服务端口最多的 IP 地址:
netstat -nat | grep "192.168.1.15:22" | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20
统计 TCP 各种状态的数量:
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn
分析 access.log 获得访问前 10 的 IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10