Linux中netstat详细使用指南
目录
1. 安装包
2. 基本语法
3. 核心选项
4. 输出字段说明
5. 应用案例
5.1 统计连接状态(分析负载)
5.2 查看路由表信息
5.3 显示网络接口统计(错误包统计)
5.4 服务器连接数暴涨?
5.5 识别异常网络连接模式
5.6 持续监控网络状态变化
5.7 审计远程登录来源
5.8 自动化采集历史数据
5.9 实时监控特定端口的连接变化
5.10 提取远程 IP 地址
5.11 组合过滤
5.12 统计各协议的连接数
5.13 定位高并发监听端口
5.14 实时状态告警脚本
5.15 网络拓扑可视化
netstat
(Network Statistics)是 Linux 系统中经典的网络统计工具,用于查看网络连接、路由表、网络接口统计等信息。尽管现代 Linux 系统(如 CentOS 7+)更推荐使用 ss
命令(性能更优),但 netstat
仍因功能全面、输出直观被广泛使用。以下是 netstat
的详细使用指南:
1. 安装包
CentOS 7 及以上系统默认未预装 netstat
(属于 net-tools
包),需手动安装:
# 安装 net-tools
sudo yum install -y net-tools
2. 基本语法
netstat [选项]
3. 核心选项
选项 | 说明 |
---|---|
| 显示所有网络连接(包括监听 |
| 仅显示 TCP 连接(默认不区分协议,需显式指定)。 |
| 仅显示 UDP 连接。 |
| 以数字形式显示 IP 地址和端口号(而非解析为域名或服务名,加快输出)。 |
| 显示连接对应的进程 PID 和程序名(需 |
| 仅显示监听状态的端口(即服务正在等待连接的端口,如 |
| 显示网络接口统计信息(如网卡流量、错误包等)。 |
| 显示网络协议统计(如 TCP/UDP/ICMP 的收发数据包数量)。 |
| 显示路由表信息(类似 |
| 持续刷新输出(每秒刷新一次,按 |
4. 输出字段说明
查看所有活动的网络连接(TCP/UDP)
netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:30081 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.100.99:80 1.1.1.1:65432 LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
输出字段说明:
-
Proto
:协议(此处为tcp
)。 -
Recv-Q
:接收队列中未被进程读取的字节数(TIME_WAIT 状态下通常为 0)。 -
Send-Q
:发送队列中未被确认的字节数(TIME_WAIT 状态下通常为 0)。 -
Local Address
:本地主机的 IP 地址和端口(如192.168.100.99:80
)。 -
Foreign Address
:对端主机的 IP 地址和端口(如 1.1.1.1:65432)。如果Foreign Address
固定为0.0.0.0:*
,表示服务处于等待连接状态。 -
State
:连接状态(此处为LISTEN) -
切勿将
Local Address
的0.0.0.0
与Foreign Address
的0.0.0.0:*
混淆:前者表示绑定所有本地接口,后者仅表示未建立连接。
5. 应用案例
5.1 统计连接状态(分析负载)
netstat -tan | awk '{print $6}' | sort | uniq -c | sort -nr
123 ESTABLISHED # 已建立的连接
45 TIME_WAIT # 等待关闭的连接
8 LISTEN # 监听状态
3 SYN_SENT # 正在发起连接
-
TIME_WAIT
过多:端口资源耗尽风险,需内核调优(如net.ipv4.tcp_tw_reuse
)。 -
SYN_RECV
激增:可能遭受SYN洪水攻击。 -
CLOSE_WAIT
堆积:应用未正确关闭连接(代码缺陷)
备注:内核调优解决TIME_WAIT过多
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT端口
net.ipv4.tcp_fin_timeout = 30 # 缩短FIN等待时间
net.ipv4.ip_local_port_range = 1024 65000 # 扩大端口范围
net.ipv4.tcp_max_tw_buckets = 5000 # 限制TIME_WAIT总数
# 注意:tcp_tw_recycle在NAT环境中禁用(可能导致连接失败)
生效命令:sysctl -p
5.2 查看路由表信息
netstat -rn # Linux (等效于 route -n)
netstat -r # Windows
-
-r
:显示路由表。 -
-n
:数字形式显示 IP(避免 DNS 解析延迟)。 -
输出关键列:
-
Destination
:目标网络。 -
Gateway
:网关地址(0.0.0.0
表示直连)。 -
Genmask
:子网掩码。 -
MSS
:最大传输单元(MTU)。 -
Window
:接收窗口大小。 -
irtt
:初始往返时间(RTT)。
-
5.3 显示网络接口统计(错误包统计)
netstat -i # Linux (接口列表)
netstat -e # Windows (以太网统计)
# watch 实时监控
watch -n 2 "netstat -i | awk '{print $1, $3, $4, $7, $8}'"
查看 RX-ERR
/TX-ERR
排查物理层故障。
5.4 服务器连接数暴涨?
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c
根据状态分布判断是攻击(大量SYN_RECV
)还是程序异常(大量CLOSE_WAIT
)。
5.5 识别异常网络连接模式
netstat -antp | awk '{print $5}' | grep -v 'Foreign' | sort | uniq -c | sort -nr | head -n 20
5.6 持续监控网络状态变化
netstat -c --interval=2
# 输出每隔2秒刷新一次,显示新建/关闭的连接
解析:-c
参数启用连续监控模式,配合 --interval
设置刷新间隔,适合观察短时间内的网络波动2。若需长期记录,可结合脚本将输出写入日志文件。
5.7 审计远程登录来源
场景:怀疑非法SSH登录尝试,需追溯所有非本地SSH连接来源。
netstat -antp | grep ':22' | grep -v '127.0.0.1'
解析:通过排除本地回环地址(127.0.0.1
),筛选出所有外部IP对SSH端口(22)的访问记录,用于安全审计
5.8 自动化采集历史数据
场景:需分析高峰期网络负载趋势,搭建定时任务记录连接快照。
#!/bin/bash
while true; donetstat -an > /var/log/netstat_$(date +%Y%m%d_%H%M%S).txtsleep 60 # 每60s记录一次
done
5.9 实时监控特定端口的连接变化
watch -n 1 "netstat -tunp | grep :443"
-n 1
:每秒刷新一次- 可替换
:443
为目标端口(如:6379、
:3306
),快速发现异常连接。
5.10 提取远程 IP 地址
netstat -antp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort -nr | uniq -c
5.11 组合过滤
需求:查看 TCP 协议、状态为 ESTABLISHED
、本地端口为 6379
、且远程 IP 为 1.1.1.1
的连接。
netstat -antp | grep -E 'tcp.*:6379.*1.1.1.1.*ESTABLISHED'
5.12 统计各协议的连接数
netstat -an | awk '/^tcp/ {++tcp} /^udp/ {++udp} END {print "TCP连接数:", tcp, "UDP连接数:", udp}'
5.13 定位高并发监听端口
需求:找出监听端口中连接数最多的前 5 个服务。
netstat -ltn | awk '/^tcp.*LISTEN/ {split($4, addr, ":"); port=addr[length(addr)]; count[port]++} END {for (p in count) print p, count[p]}' | sort -nrk2 | head -n5
5.14 实时状态告警脚本
#!/bin/bash
TIME_WAIT_COUNT=$(netstat -ant | grep TIME_WAIT | wc -l)
if [ $TIME_WAIT_COUNT -gt 3000 ]; thenecho "警告: TIME_WAIT连接数($TIME_WAIT_COUNT)过高,请注意 " | mail -s "网络出现异常" admin@example.com
fi
5.15 网络拓扑可视化
实践方案:将 netstat
输出导入绘图工具(如Graphviz),生成实时网络拓扑图。