netstat
是一个用于网络诊断和管理的命令行工具,主要用来显示网络连接、路由表、接口统计、网络协议以及网络端口的使用情况。在 Linux、Unix 和 Windows 系统中都可以使用。
以下是对 netstat
命令的详细介绍,包括基本用法、常用选项和示例。
基本语法
1 | netstat [选项] |
- 选项:用于指定要显示的信息类型,例如活动连接、监听端口、网络接口统计等。
常用选项
选项 | 功能 |
---|---|
-a |
显示所有连接和监听端口。 |
-t |
显示 TCP 协议的连接。 |
-u |
显示 UDP 协议的连接。 |
-l |
仅显示监听状态的连接(Listening)。 |
-p |
显示连接对应的进程信息(需要超级用户权限)。 |
-n |
以数字形式显示地址和端口(不进行 DNS 或服务名解析,提高查询速度)。 |
-r |
显示路由表。 |
-e |
显示详细的网络信息(如数据包统计)。 |
-c |
持续显示网络状态,每隔一段时间更新一次。 |
-s |
按协议显示统计信息。 |
-i |
显示网络接口的状态。 |
常用选项组合
-
netstat -an
- 显示所有连接和监听端口,使用数字形式表示地址和端口。
-
netstat -tuln
- 显示所有监听的 TCP 和 UDP 端口,使用数字形式。
-
netstat -p
- 显示连接对应的进程信息(需要
sudo
权限)。
- 显示连接对应的进程信息(需要
-
netstat -r
- 显示路由表。
-
netstat -i
- 显示网络接口的状态。
详解选项和示例
显示所有连接和监听端口(-a
)
- 命令:
1
netstat -a
- 输出:
- 显示所有活动的网络连接以及监听的端口(TCP 和 UDP)。
仅显示监听端口(-l
)
- 命令:
1
netstat -l
- 用途:
- 查看当前系统正在监听的端口,通常用于检查服务器服务是否正常运行。
显示 TCP 连接(-t
)
- 命令:
1
netstat -t
- 用途:
- 查看当前系统的所有 TCP 连接。
显示 UDP 连接(-u
)
- 命令:
1
netstat -u
- 用途:
- 查看当前系统的所有 UDP 连接。
以数字形式显示地址和端口(-n
)
- 命令:
1
netstat -an
- 用途:
- 不进行 DNS 和服务名解析,直接显示 IP 地址和端口号,提高查询速度。
显示连接对应的进程信息(-p
)
- 命令:
1
sudo netstat -ap
- 用途:
- 查看每个连接或监听端口对应的进程名称和 PID(需要超级用户权限)。
- 输出示例:
1
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1234/mysqld
显示路由表(-r
)
- 命令:
1
netstat -r
- 用途:
- 显示系统的路由表,类似于
route -n
命令。
- 显示系统的路由表,类似于
- 输出示例:
1
2
3Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
显示网络接口状态(-i
)
- 命令:
1
netstat -i
- 用途:
- 查看网络接口的传输状态,例如接收和发送的字节数、错误数等。
- 输出示例:
1
2
3Kernel Interface table
Iface MTU RX-OK RX-ERR TX-OK TX-ERR
eth0 1500 12345 0 23456 0
按协议统计网络信息(-s
)
- 命令:
1
netstat -s
- 用途:
- 按协议(TCP、UDP、ICMP 等)显示网络统计信息。
- 输出示例:
1
2
3
4
5
6
7Tcp:
12345 active connections openings
23456 passive connection openings
0 failed connection attempts
Udp:
5678 packets received
0 packet receive errors
持续更新网络状态(-c
)
- 命令:
1
netstat -c
- 用途:
- 每隔一秒更新一次网络连接状态,适合实时监控网络活动。
显示监听的 TCP 和 UDP 端口(-tuln
)
- 命令:
1
netstat -tuln
- 用途:
- 查看当前监听的所有 TCP 和 UDP 端口,显示数字形式的 IP 和端口号。
- 输出示例:
1
2
3Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
结合其他命令
查看某端口的使用情况
- 查看系统中 80 端口是否被监听:
1
netstat -an | grep ":80"
查看某进程的网络连接
- 查找 PID 为 1234 的进程的网络连接:
1
netstat -anp | grep "1234"
按状态过滤连接
-
查看所有
ESTABLISHED
状态的连接:1
netstat -an | grep ESTABLISHED
-
查看所有处于
LISTEN
状态的端口:1
netstat -an | grep LISTEN
统计连接数
- 统计所有
ESTABLISHED
连接的数量:1
netstat -an | grep ESTABLISHED | wc -l
注意事项
-
权限问题:
- 使用
-p
选项查看进程信息时,需要具备超级用户权限(sudo
)。
- 使用
-
替代工具:
- 在现代 Linux 系统中,
netstat
已逐渐被ss
命令取代:ss
的功能和输出格式类似于netstat
,但性能更高。- 示例:
1
ss -tuln
- 在现代 Linux 系统中,
-
性能问题:
- 如果系统中有大量网络连接,
netstat
的执行速度可能较慢,ss
通常是更好的选择。
- 如果系统中有大量网络连接,
总结
netstat
是一个强大的网络诊断工具,可以快速查看系统的网络连接、监听端口、路由表和网络接口状态。- 常用组合:
- 查看监听的端口:
netstat -tuln
- 查看连接的进程:
sudo netstat -ap
- 查看路由表:
netstat -r
- 查看监听的端口:
- 现代系统建议使用
ss
替代netstat
,但在许多场景下,netstat
仍然是非常有用的工具。