Linux `netstat` 命令详解

Linux netstat 命令详解


🎯 学习目标

  1. 理解 netstat 命令的基本功能与作用
  2. 掌握 netstat 的常用参数及使用方法(如 -t, -u, -l, -n, -p, -a
  3. 能在实际网络故障排查、服务监控和安全审计中灵活运用 netstat 查看连接状态、端口监听情况等
  4. 了解 netstat 在不同 Linux 发行版(Ubuntu、CentOS、Euler)中的行为差异及其现代替代命令 ss

🔑 核心重点

参数 含义 使用场景
-t 显示 TCP 连接 查看 Web、SSH、数据库等服务连接
-u 显示 UDP 连接 查看 DNS、NTP 等服务
-l 显示监听状态的服务 查看正在等待连接的端口
-n 不解析域名和服务名 提高输出速度,适合脚本
-p 显示进程信息(需 root) 查看哪个程序占用了某个端口
-a 显示所有连接(包括监听和已建立) 全面查看网络状态
实际应用场景 服务调试、安全检查、端口占用排查、连接分析

🧠 详细讲解

📌 一、什么是 netstat

netstatnetwork statistics 的缩写,是一个用于显示 网络连接、路由表、接口统计信息、伪装连接、多播成员等信息 的强大命令。

📌 它可以用来:

  • 查看当前系统上所有的网络连接状态
  • 判断哪些服务正在监听端口
  • 分析是否有异常连接(如后门)
  • 配合 grep 进行日志分析或自动化脚本处理

⚠️ 注意:netstat 已被标记为过时命令,推荐使用更高效且功能类似的 ss 命令。但因其广泛使用,仍需掌握其用法。


📌 二、基础用法示例

✅ 示例 1:查看所有活动的网络连接和监听端口

$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 localhost:smtp          *:*                     LISTEN     
tcp        0     52 192.168.1.10:ssh        192.168.1.5:56789       ESTABLISHED
udp        0      0 *:bootpc               *:*                                

📌 输出说明:

  • Proto:协议类型(TCP/UDP)
  • Recv-Q / Send-Q:接收/发送队列长度
  • Local Address:本地地址和端口
  • Foreign Address:远程地址和端口
  • State:连接状态(LISTEN 表示监听,ESTABLISHED 表示已建立)

✅ 示例 2:只查看 TCP 和 UDP 的监听端口

$ netstat -tuln
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 0.0.0.0:25              0.0.0.0:*               LISTEN     
udp        0      0 0.0.0.0:68              0.0.0.0:*                           

📌 参数解释:

  • -t:TCP 协议
  • -u:UDP 协议
  • -l:只显示监听(LISTEN)状态的连接
  • -n:不进行反向 DNS 解析,直接显示 IP 和端口号

📌 三、常用操作与参数详解

参数组合 功能描述 使用建议
netstat -tuln 查看所有 TCP/UDP 监听端口(推荐格式) 快速定位开放端口
netstat -tulnp 加上进程 PID(需 root) 查看哪个程序在监听
netstat -antp 查看所有 TCP 连接(包括 ESTABLISHED) 分析当前连接数
netstat -s 查看网络统计信息 总体流量分析
netstat -i 查看接口统计信息(收发包) 接口性能诊断
netstat -r 查看路由表 类似 route -n

📌 四、进阶实战案例

🧪 场景 1:查找占用某个端口的进程

sudo netstat -tulnp | grep :80

输出示例:

tcp6  0  0 :::80  :::*  LISTEN  1234/nginx

📌 可以看到 PID 为 1234 的 nginx 正在监听 80 端口。


🧪 场景 2:分析服务器是否遭受 DDoS 攻击(大量连接)

netstat -antp | awk '{print $5}' | grep -v 'Foreign' | sort | uniq -c | sort -nr | head -n 20

📌 输出示例:

123 192.168.1.100:56789
 98 192.168.1.101:12345
 ...

📌 该命令可帮助你发现哪些 IP 地址建立了最多的连接,判断是否存在异常访问。


🧪 场景 3:查看所有 SSH 连接(排除本地回环)

netstat -antp | grep ':22' | grep -v '127.0.0.1'

📌 适用于审计登录来源,防止非法接入。


📌 五、不同 Linux 发行版上的行为差异

发行版 是否自带 netstat 所属软件包 特点
Ubuntu 18.04+ ❌ 默认不安装 net-tools 推荐使用 ss
CentOS 7/8 ✅ 默认安装 net-tools 支持完整功能
EulerOS 2.9+ ✅ 默认安装 net-tools 华为企业级系统
Alpine Linux ❌ 默认不带 net-tools 需手动安装
Arch Linux ❌ 默认不带 net-tools 推荐使用 ss

🔧 安装建议:

# Ubuntu/Debian
sudo apt install net-tools

# CentOS/EulerOS
sudo yum install net-tools

# Alpine
apk add net-tools

📌 六、与 ss 命令对比(现代替代方案)

功能 netstat ss
查看监听端口 netstat -tulnp ss -tulnp
查看所有连接 netstat -antp ss -antp
查看统计信息 netstat -s ss -s
性能 较慢 更快
默认安装 多数旧系统有 新系统默认安装
推荐程度 已过时 强烈推荐使用

📌 推荐学习顺序:

  • 初学者先学 netstat
  • 进阶后转向 ss 命令,因为它更快、支持更多高级功能(如过滤、状态匹配等)

📌 七、结合实际项目举例

📂 项目背景:部署了一个 Web 服务,但无法访问

✅ 故障排查步骤:

  1. 确认服务是否在监听 80 端口

    sudo netstat -tulnp | grep :80
    
  2. 查看是否有客户端连接

    sudo netstat -antp | grep :80
    
  3. 检查防火墙规则是否放行 80 端口

    sudo iptables -L -n | grep :80
    # 或
    sudo ufw status
    
  4. 测试外部能否连接 80 端口

    telnet your-server-ip 80
    

📌 通过这些命令可以快速定位问题是出在网络层还是应用层。


📚 总结

通过本章学习,你应该已经掌握:

  • netstat 命令的基本语法和参数含义
  • 如何使用 netstat 查看网络连接状态、监听端口、连接数量等
  • 在 Shell 脚本中结合 netstat 实现自动化网络检测与日志分析
  • 不同 Linux 发行版下的兼容性问题及解决方法
  • 实战中如何避免误操作和性能陷阱

💡 提醒:虽然 netstat 已逐渐被 ss 替代,但它仍是运维人员必须掌握的基础命令之一。熟练掌握它将帮助你在旧系统维护、脚本编写和紧急排障中游刃有余。


如果你还想深入了解 netstat 在 Python、Go、Shell 脚本中的高级用法,请继续提问 👇

posted @ 2025-06-23 23:21  红尘过客2022  阅读(448)  评论(0)    收藏  举报