目录
[1. 安装包](#1. 安装包)
[2. 基本语法](#2. 基本语法)
[3. 核心选项](#3. 核心选项)
[4. 输出字段说明](#4. 输出字段说明)
[5. 应用案例](#5. 应用案例)
[5.1 统计连接状态(分析负载)](#5.1 统计连接状态(分析负载))
[5.2 查看路由表信息](#5.2 查看路由表信息)
[5.3 显示网络接口统计(错误包统计)](#5.3 显示网络接口统计(错误包统计))
[5.4 服务器连接数暴涨?](#5.4 服务器连接数暴涨?)
[5.5 识别异常网络连接模式](#5.5 识别异常网络连接模式)
[5.6 持续监控网络状态变化](#5.6 持续监控网络状态变化)
[5.7 审计远程登录来源](#5.7 审计远程登录来源)
[5.8 自动化采集历史数据](#5.8 自动化采集历史数据)
[5.9 实时监控特定端口的连接变化](#5.9 实时监控特定端口的连接变化)
[5.10 提取远程 IP 地址](#5.10 提取远程 IP 地址)
[5.11 组合过滤](#5.11 组合过滤)
[5.12 统计各协议的连接数](#5.12 统计各协议的连接数)
[5.13 定位高并发监听端口](#5.13 定位高并发监听端口)
[5.14 实时状态告警脚本](#5.14 实时状态告警脚本)
[5.15 网络拓扑可视化](#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. 核心选项
选项 | 说明 |
---|---|
-a /--all |
显示所有 网络连接(包括监听 LISTEN 和非监听 ESTABLISHED 等状态)。 |
-t /--tcp |
仅显示 TCP 连接(默认不区分协议,需显式指定)。 |
-u /--udp |
仅显示 UDP 连接。 |
-n /--numeric |
以数字形式显示 IP 地址和端口号(而非解析为域名或服务名,加快输出)。 |
-p /--program |
显示连接对应的进程 PID 和程序名 (需 root 权限)。 |
-l /--listening |
仅显示监听状态 的端口(即服务正在等待连接的端口,如 LISTEN )。 |
-i /--interface |
显示网络接口统计信息(如网卡流量、错误包等)。 |
-s /--statistics |
显示网络协议统计(如 TCP/UDP/ICMP 的收发数据包数量)。 |
-r /--route |
显示路由表 信息(类似 route -n )。 |
-c /--continuous |
持续刷新输出(每秒刷新一次,按 Ctrl+C 终止)。 |
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; do
netstat -an > /var/log/netstat_$(date +%Y%m%d_%H%M%S).txt
sleep 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 ]; then
echo "警告: TIME_WAIT连接数($TIME_WAIT_COUNT)过高,请注意 " | mail -s "网络出现异常" admin@example.com
fi
5.15 网络拓扑可视化
实践方案 :将 netstat
输出导入绘图工具(如Graphviz),生成实时网络拓扑图。