Linux netstat 指令

Linux netstat 指令

netstat(Network Statistics)是 Linux 系统中用于查看网络状态、连接、路由表和接口统计信息的经典命令行工具。它为系统管理员和开发人员提供了强大的网络诊断功能,帮助分析网络连接、监控流量以及排查网络问题。尽管在现代 Linux 系统中,netstat 正在被更新的工具(如 ss)部分取代,但其简单性和广泛适用性使其仍然是许多场景下的首选工具。


📚 什么是 netstat 指令?

netstat 是 net-tools 软件包的一部分,用于显示网络相关的统计信息,包括活动连接、监听端口、路由表、网络接口状态等。它可以帮助用户了解系统的网络活动,识别潜在的安全问题或性能瓶颈。netstat 广泛应用于 Linux、Unix 和类 Unix 系统(如 macOS),在网络管理和故障排查中扮演重要角色。

核心特点

  • 多维度信息:显示 TCP/UDP 连接、监听端口、路由表、接口统计等。
  • 灵活过滤:支持按协议、状态、进程等过滤网络信息。
  • 实时监控:支持连续输出,适合动态观察网络状态。
  • 跨平台支持:在大多数 Linux 发行版(如 Ubuntu、CentOS、Debian)上可用。
  • 轻量高效:命令简单,适合脚本自动化和快速诊断。

基本语法

netstat [选项]

常用选项包括:

  • -a:显示所有连接(包括监听和非监听)。
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -n:以数字格式显示地址和端口(不解析为主机名)。
  • -l:仅显示监听端口。
  • -p:显示与连接相关的进程 ID 和程序名。
  • -r:显示路由表。
  • -i:显示网络接口统计信息。
  • -c:连续输出,动态更新。
  • -s:显示网络协议统计信息。

注意事项

  • 权限要求:某些选项(如 -p)需要 root 权限(使用 sudo)。

  • 软件包安装:netstat 属于 net-tools,可能需要安装:

    sudo apt install net-tools  # Debian/Ubuntu
    sudo yum install net-tools  # CentOS/RHEL
    
  • 替代工具:在现代系统中,ss 和 ip 命令提供类似功能,性能更高。

  • 输出解析:输出信息较多,建议结合 grep 或 awk 过滤。


🔧 netstat 的常见用途

netstat 的应用场景广泛,以下是几个典型用途:

  1. 监控网络连接:查看活动 TCP/UDP 连接,分析通信状态。
  2. 端口管理:检查监听端口,识别服务或潜在安全风险。
  3. 路由表检查:验证网络路由配置,确保数据包正确转发。
  4. 接口统计:监控网络接口的流量和错误。
  5. 性能分析:收集协议统计信息,优化网络性能。

🛠️ 基础用法与示例

以下通过具体示例介绍 netstat 的基础用法,帮助读者快速上手。以下示例假设运行在支持 net-tools 的 Linux 系统(如 Ubuntu 22.04 或 CentOS 8)。

示例 1:显示所有活动连接

查看所有网络连接(包括监听和非监听):

netstat -a
  • 解释

    • -a:显示所有连接和监听端口。

    • 输出示例(部分):

      Active Internet connections (servers and established)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
      tcp        0      0 192.168.1.100:22        192.168.1.101:12345     ESTABLISHED
      udp        0      0 0.0.0.0:68              0.0.0.0:*               
      
  • 字段说明

    • Proto:协议(TCP/UDP)。
    • Recv-Q / Send-Q:接收/发送队列中的数据量。
    • Local Address:本地地址和端口。
    • Foreign Address:远程地址和端口。
    • State:连接状态(如 LISTEN、ESTABLISHED)。

示例 2:显示监听端口

查看系统上所有监听的端口:

netstat -tuln
  • 解释

    • -t:显示 TCP 连接。

    • -u:显示 UDP 连接。

    • -l:仅显示监听状态。

    • -n:以数字格式显示地址和端口。

    • 输出示例:

      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
      tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
      udp        0      0 0.0.0.0:68              0.0.0.0:*               
      

示例 3:显示进程信息

查看与连接相关的进程:

sudo netstat -tulnp
  • 解释

    • -p:显示进程 ID 和程序名。

    • 输出示例:

      Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
      tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
      tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      5678/mysqld
      
  • 注意:需要 root 权限。

示例 4:显示路由表

查看系统路由表:

netstat -r
  • 解释

    • -r:显示路由表,类似 route 命令。

    • 输出示例:

      Kernel IP routing table
      Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
      default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
      192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
      

示例 5:显示网络接口统计

查看网络接口的流量和错误:

netstat -i
  • 解释

    • -i:显示网络接口统计信息。

    • 输出示例:

      Kernel Interface table
      Iface   MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
      eth0    1500  123456      0      0      0   123456      0      0      0 BMRU
      lo      65536 789012      0      0      0   789012      0      0      0 LRU
      
  • 字段说明

    • RX-OK / TX-OK:接收/发送的成功数据包。
    • RX-ERR / TX-ERR:接收/发送的错误数据包。

示例 6:实时监控连接

连续显示网络连接状态:

netstat -c
  • 解释
    • -c:每秒刷新输出,类似 watch。
    • 按 Ctrl+C 退出。

🚀 高级用法

netstat 提供多种高级功能,适合复杂网络诊断和监控场景。以下介绍一些高级用法及其实现方法。

🛡️ 1. 过滤特定协议连接

查看所有 TCP 连接,并过滤特定状态:

netstat -at | grep ESTABLISHED
  • 解释

    • -at:显示所有 TCP 连接。

    • grep ESTABLISHED:过滤状态为 ESTABLISHED 的连接。

    • 输出示例:

      tcp        0      0 192.168.1.100:22        192.168.1.101:12345     ESTABLISHED
      

🔍 2. 显示特定端口连接

查找使用端口 80 的连接:

sudo netstat -tunap | grep ":80"
  • 解释

    • -tunap:显示 TCP/UDP 连接、数字格式、进程信息。

    • grep “:80”:过滤包含端口 80 的连接。

    • 输出示例:

      tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1234/apache2
      

🔄 3. 统计协议使用情况

显示各协议的统计信息:

netstat -s
  • 解释

    • -s:显示 TCP、UDP、ICMP 等协议的统计信息。

    • 输出示例(部分):

      Tcp:
          1234 active connection openings
          567 passive connection openings
          10 failed connection attempts
          20 connection resets received
      Udp:
          789 packets received
          123 packets to unknown port received
      
  • 用途:分析网络协议性能,识别异常。

⚡ 4. 结合进程查找可疑连接

查找未知来源的连接:

sudo netstat -tunap | grep "192.168.1.101"
  • 解释
    • 过滤来自特定 IP(192.168.1.101)的连接。
    • 检查 PID/Program name 列,识别潜在恶意进程。

🔐 5. 监控网络接口性能

实时监控接口流量:

netstat -i -c 2
  • 解释
    • -c 2:每 2 秒刷新接口统计。
    • 适合监控网络接口的性能和错误。

⚠️ 使用 netstat 时的注意事项

netstat 提供大量网络信息,操作不当可能导致误判或性能影响。以下是一些关键注意事项:

  1. 权限要求:使用 -p 或查看所有连接需要 root 权限。

  2. 性能开销:频繁运行 netstat -c 或查询大量连接可能增加系统负载。

  3. 解析主机名:默认解析 IP 为主机名(慢),建议使用 -n 提高速度。

  4. 替代工具:现代系统中,ss 比 netstat 更快,建议熟悉:

    ss -tuln
    
  5. 安全监控:定期检查监听端口和外部连接,防范潜在安全威胁。

  6. 输出过滤:结合 grep、awk 或 sort 处理复杂输出。


🌟 高级技巧与实战案例

以下是一些高级技巧和实战案例,展示 netstat 的强大功能。

🖥️ 案例 1:排查 Web 服务器问题

检查 Apache Web 服务器(端口 80)是否正常监听:

sudo netstat -tuln | grep ":80"
  • 解释

    • 确保 Apache 监听 80 端口。

    • 若无输出,检查服务状态:

      sudo systemctl status apache2
      

📦 案例 2:监控 SSH 连接

查找所有 SSH(端口 22)连接:

sudo netstat -tunap | grep ":22"
  • 解释
    • 检查 SSH 连接状态和来源 IP。
    • 结合 grep “ESTABLISHED” 过滤活跃连接。

🔒 案例 3:检测潜在安全威胁

查找可疑外部连接:

sudo netstat -tunap | grep -v "127.0.0.1"
  • 解释
    • 排除本地回环地址(127.0.0.1),检查外部连接。
    • 检查 PID/Program name 列,识别异常进程。

📈 案例 4:分析网络性能

监控 TCP 连接统计:

watch -n 5 'netstat -s | grep -i tcp'
  • 解释
    • 每 5 秒显示 TCP 协议统计。
    • 分析连接失败、重置等指标。

🔧 案例 5:自动化网络监控

编写脚本定期记录连接状态:

#!/bin/bash
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "Network Status at $TIMESTAMP" >> /var/log/netstat.log
netstat -tunap >> /var/log/netstat.log

添加到 cron:

sudo crontab -e

添加:

*/5 * * * * /path/to/script.sh
  • 解释
    • 每 5 分钟记录网络连接状态。
    • 适合长期监控和审计。

🔗 结合其他工具

netstat 常与其他工具结合,增强功能。

与 grep 结合

过滤特定 IP 或端口:

netstat -tunap | grep "192.168.1.100"

与 awk 结合

提取特定字段:

netstat -tunap | awk '/tcp/ {print $4, $5, $7}'
  • 解释:提取本地地址、远程地址和进程信息。

与 ss 结合

对比 netstat 和 ss 输出:

ss -tuln
netstat -tuln
  • 解释:ss 提供更快的查询速度,适合高负载环境。

与 cron 结合

定期监控(见案例 5)。


📝 总结

netstat 是 Linux 系统中分析网络状态的经典工具,提供连接状态、端口监听、路由表和接口统计等信息。改文从基础用法到高级技巧,结合具体示例和注意事项,全面介绍了 netstat 的功能。无论是网络故障排查、安全监控还是性能分析,netstat 都能提供强大支持。尽管 ss 等新工具逐渐流行,netstat 的简单性和广泛适用性使其依然不可或缺。

更多技术分享,关注公众号:halugin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值