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 脚本中的高级用法,请继续提问 👇

有哪些常见的手机地图应用程序?
原创疯狂贪吃蛇辅助工具下载、安装使用图文教程 含:高手游定制版疯狂贪吃蛇辅助工具下载包