Linux `netstat` 命令详解
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 脚本中的高级用法,请继续提问 👇

浙公网安备 33010602011771号