netstat 是 Linux 中用于显示网络连接、路由表、接口状态等信息的命令。虽然它在现代系统中逐渐被 ss 和 ip 命令取代,但在很多环境中仍然有用。
以下是 netstat 命令的详细讲解,包括常见选项和输出解释。
一、基本语法
netstat [选项]
二、常用选项详解
选项
含义
-a
显示所有连接和监听端口(包括 TCP 和 UDP)
-t
显示 TCP 连接
-u
显示 UDP 连接
-l
仅显示监听中的套接字(Listen)
-n
以数字形式显示地址和端口(不解析为主机名和服务名)
-p
显示哪个进程在使用该端口(需要 root 权限)
-r
显示路由表(类似 route -n)
-i
显示网络接口状态(类似 ifconfig)
-s
显示每个协议的统计信息
-c
每隔一段时间持续输出(与 watch 类似)
三、常见用法示例
1. 显示所有连接(包括监听)
netstat -a
2. 显示当前所有 TCP 连接
netstat -at
3. 显示所有监听的 UDP 端口
netstat -lu
4. 显示端口号和 IP 而不是主机名(加速输出)
netstat -tun
5. 查看使用端口的程序(需 root)
sudo netstat -tulpn
6. 查看路由表
netstat -rn
7. 查看网络接口统计信息
netstat -i
8. 实时查看连接状态(每秒刷新)
watch netstat -tulpn
四、输出字段解释(以 netstat -tulpn 为例)
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
udp 0 0 0.0.0.0:68 0.0.0.0:* 567/dhclient
字段说明:
Proto:协议(tcp / udp)
Recv-Q:接收队列中的数据量
Send-Q:发送队列中的数据量
Local Address:本地 IP 和端口
Foreign Address:远程 IP 和端口(* 表示尚未建立连接)
State:连接状态(TCP 有,UDP 没有),如:
LISTEN: 等待连接
ESTABLISHED: 已建立连接
TIME_WAIT: 等待足够时间以确保远程 TCP 接收最后的 ACK
PID/Program name:使用该端口的进程 ID 和程序名
五、替代工具推荐
ss:比 netstat 更快、功能更强(建议使用)
ss -tuln
ss -p
ip:用于替代 netstat -r 和 ifconfig
ip route
ip addr