Linux netstat 命令详解
🎯 学习目标
理解 netstat 命令的基本功能与作用
掌握 netstat 的常用参数及使用方法(如 -t, -u, -l, -n, -p, -a)
能在实际网络故障排查、服务监控和安全审计中灵活运用 netstat 查看连接状态、端口监听情况等
了解 netstat 在不同 Linux 发行版(Ubuntu、CentOS、Euler)中的行为差异及其现代替代命令 ss
🔑 核心重点
参数
含义
使用场景
-t
显示 TCP 连接
查看 Web、SSH、数据库等服务连接
-u
显示 UDP 连接
查看 DNS、NTP 等服务
-l
显示监听状态的服务
查看正在等待连接的端口
-n
不解析域名和服务名
提高输出速度,适合脚本
-p
显示进程信息(需 root)
查看哪个程序占用了某个端口
-a
显示所有连接(包括监听和已建立)
全面查看网络状态
实际应用场景
服务调试、安全检查、端口占用排查、连接分析
🧠 详细讲解
📌 一、什么是 netstat?
netstat 是 network 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 服务,但无法访问
✅ 故障排查步骤:
确认服务是否在监听 80 端口
sudo netstat -tulnp | grep :80
查看是否有客户端连接
sudo netstat -antp | grep :80
检查防火墙规则是否放行 80 端口
sudo iptables -L -n | grep :80
# 或
sudo ufw status
测试外部能否连接 80 端口
telnet your-server-ip 80
📌 通过这些命令可以快速定位问题是出在网络层还是应用层。
📚 总结
通过本章学习,你应该已经掌握:
netstat 命令的基本语法和参数含义
如何使用 netstat 查看网络连接状态、监听端口、连接数量等
在 Shell 脚本中结合 netstat 实现自动化网络检测与日志分析
不同 Linux 发行版下的兼容性问题及解决方法
实战中如何避免误操作和性能陷阱
💡 提醒:虽然 netstat 已逐渐被 ss 替代,但它仍是运维人员必须掌握的基础命令之一。熟练掌握它将帮助你在旧系统维护、脚本编写和紧急排障中游刃有余。
如果你还想深入了解 netstat 在 Python、Go、Shell 脚本中的高级用法,请继续提问 👇