当前位置: 首页 > news >正文

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. 核心选项 

选项

说明

-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)。

  • State:连接状态(此处为LISTEN)

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),生成实时网络拓扑图。

http://www.dtcms.com/a/314412.html

相关文章:

  • 开源的现代数据探索和可视化平台:Apache Superset 架构组件和安装方式 Kubernetes Docker Compose PyPI
  • 服务器突然之间特别卡,什么原因?
  • 为什么要烧录固件?——从生产到运维的全流程解析
  • k8s学习
  • 佚名运维训练营-第1天
  • 2025-08-04-零成本搭建 AI 应用!Hugging Face 免费 CPU 资源实战指南
  • 飞算JavaAI编程插件:以AI之力赋能Java开发,让编码效率再升级
  • 37. line-height: 1.2 与 line-height: 120% 的区别
  • 总结成人本科毕业前有哪些任务?
  • C++面试题及详细答案100道( 01-10 )
  • Android 分析底电流高即功耗大的几个方面
  • React 19 + Next.js 15 中实现混合布局
  • React Hooks 原理深度解析与最佳实践
  • Spring IoC容器与Bean管理
  • labview连接PLC的三种方式
  • 设计模式-创建型-工厂模式
  • 阿里云与华为云产品的差异
  • RTSP/RTMP播放器超低延迟实战:无人机远控视觉链路的工程实践
  • 项目配置文件正确但是启动失败,报配置文件内容错误或中间件地址与实际不符
  • wpf Image 转 90 度
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)
  • ShowDoc与Docmost对比分析:开源文档管理工具的选择指南
  • 05 基于sklearn的机械学习-梯度下降(下)
  • 神经网络---非线性激活
  • Vue 响应式数据核心:ref 与 reactive 的本质区别
  • transformer与神经网络
  • CMakeLists.txt学习
  • C++ 中 initializer_list 类型推导
  • Exporters | 安装elasticsearch_exporter
  • Kali基础知识点【2】