当前位置: 首页 > 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.xdnf.cn/news/1240993.html

相关文章:

  • 【Linux】System V - 基于建造者模式的信号量
  • DP-v2.1-mem-clean学习(3.6.8.2-3.6.8.3)
  • Linux文件权限管理与ACL配置指南
  • wpf Image 转 90 度
  • 9.感知机、神经网络
  • 国产化Word处理控件Spire.Doc教程:Python提取Word文档中的文本、图片、表格等
  • Excel商业智能分析报表 【销售管理分析仪】
  • 百度翻译详解:包括PaddleNLP、百度AI开放平台、接口逆向(包括完整代码)
  • Android工程命令行打包并自动生成签名Apk
  • Go语言高并发价格监控系统设计
  • 向量空间模型
  • 从exec到Shell:深度解析Linux进程等待,程序替换与自主Shell实现
  • 抛出自定义异常
  • Android UI 组件系列(九):ListView 性能优化与 ViewHolder 模式实战
  • 复现论文《A Fiber Bragg Grating Sensor System for Train Axle Counting》
  • 多级表头的导出
  • 如何使用EF框架操作Sqlite
  • 多租户字典管理系统完整设计
  • TCP 协议的“无消息边界”(No Message Boundaries)特性
  • shell脚本tcpdump抓取数据解析执行关机指令
  • PyCharm代码规范与代码格式化插件安装与使用:pylint和autopep8
  • 质押和抵押有什么区别
  • 【Java】一篇详解HashMap的扩容机制!!
  • 2025年8月4日私鱼创作平台v1.0.4公测版更新发布-完成大部分功能包含关注创作者以及发布作品及合集功能优雅草科技
  • 音视频学习笔记
  • 深入解析 Apache Tomcat 配置文件
  • Planner 5D v2.29.0 安卓高级解锁版,手机3D家装,全套家具免费
  • 鸿蒙开发-端云一体化--云数据库
  • [spring-cloud: 负载均衡]-源码分析
  • Nginx服务做负载均衡网关