netstat 是一个用于显示网络连接、路由表和网络统计信息的命令行工具。它可以帮助你查看当前系统中的网络状态,如已建立的连接、监听端口、路由表等。
一、语法:
netstat [options]
二、常用选项:
1. 基础选项:
-a
:显示所有连接和监听端口。-r
:显示系统路由表信息。-n
:以数字形式显示地址和端口号,而不使用域名和服务名称。-p
:显示与连接关联的进程信息,包括进程 ID(PID)和进程名称(COMMAND)。
2. 连接状态选项:
-l
:仅显示监听状态的连接。-t
:仅显示 TCP 协议的连接。-u
:仅显示 UDP 协议的连接。-w
:仅显示原始套接字连接。-x
:显示 Unix 域套接字连接。
3. 显示格式选项:
-c
:持续输出信息,每隔一段时间自动刷新显示。可以通过 Ctrl+C 终止。-e
:显示扩展信息,包括 UID、GID、Inode 等。-F
:使用指定的输出格式进行显示。-o
:显示计时器信息。
4. 过滤选项:
-C
:指定配置文件路径。-E
:设置扩展匹配模式。-f
:显示指定进程相关的连接信息。-g
:显示多播组信息。-h
:显示帮助信息。-i
:显示指定接口相关的连接信息。-M
:显示多播的源和接收者信息。-N
:设置输出地址和服务名称时使用数字格式。-O
:设置输出格式。-s
:显示各种统计信息。-V
:显示版本信息。
三、常用用法
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:631 *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN
2. 显示所有 TCP 连接:
netstat -at
这会显示所有当前的 TCP 连接,包括本地地址和外部地址。
示例输出:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:631 *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN
3. 显示所有 UDP 连接:
netstat -au
这会显示所有当前的 UDP 连接,包括本地地址和外部地址。
示例输出:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:bootpc *:*
udp 0 0 *:mdns *:*
4. 显示监听状态的端口:
netstat -l
这会显示当前系统上处于监听状态的端口。
示例输出:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:631 *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN
5. 显示当前系统的路由表信息:
netstat -r
这会显示当前系统的路由表信息,包括目标地址、网关、接口和标志等。
示例输出:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
6. 显示与连接关联的进程信息:
netstat -p
这会显示每个连接所关联的进程 ID(PID)和进程名称。
示例输出:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:631 *:* LISTEN 1234/cupsd
tcp6 0 0 [::]:ssh [::]:* LISTEN 5678/sshd
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN 1234/cupsd
7. 以数字形式显示地址和端口号:
netstat -n
这会以数字形式显示地址和端口号,而不使用域名和服务名称。
示例输出:
Active Internet connections (servers and established)
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 127.0.0.1:631 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
8. 显示进程的详细信息:
netstat -e
这会显示与连接关联的扩展信息,如 UID、GID、Inode 等。
示例输出:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 localhost:631 *:* LISTEN 1234 56789 1234/cupsd
tcp6 0 0 [::]:ssh [::]:* LISTEN 5678 98765 5678/sshd
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN 1234 56789 1234/cupsd
9. 查看指定端口是否被占用:
netstat -an | grep <port>
这会查找并显示指定端口是否被占用。
示例输出:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
10. 查找指定端口所属的进程:
```
netstat -ap | grep <port>
```
这会查找并显示使用指定端口的进程信息。
示例输出:
```
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5678/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1234/cupsd
tcp6 0 0 :::22 :::* LISTEN 5678/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1234/cupsd
```
11. 显示网络连接的统计信息:
```
netstat -s
```
这会统计传输层和网络层的数据包、错误、丢失等信息。
示例输出:
```
Ip:
12345 total packets received
67890 with invalid addresses
1234 forwarded
56789 incoming packets discarded
98765 incoming packets delivered
Tcp:
12345 active connections openings
67890 passive connection openings
1234 failed connection attempts
56789 connection resets received
98765 connections established
```
12. 监控网络连接状态:
```
netstat -c
```
这会持续输出当前系统中的所有网络连接状态,每隔一段时间自动刷新显示。
示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:631 *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN
```
13. 显示指定接口相关的连接信息:
```
netstat -i <interface>
```
这会显示指定网络接口相关的连接信息。
示例输出:
```
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 12345 0 0 0 67890 0 0 0 BMRU
```
14. 显示监听状态的 TCP 端口和进程信息:
```
netstat -lt
```
这会显示正在监听状态的 TCP 端口以及与之关联的进程信息。
示例输出:
```
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:631 *:* LISTEN 1234/cupsd
tcp6 0 0 [::]:ssh [::]:* LISTEN 5678/sshd
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN 1234/cupsd
```
15. 显示网络连接的详细信息:
```
netstat -tup
```
这会显示所有 TCP 和 UDP 连接的详细信息,包括本地地址、外部地址、状态和进程信息。
示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:631 *:* LISTEN 1234/cupsd
tcp6 0 0 [::]:ssh [::]:* LISTEN 5678/sshd
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN 1234/cupsd
```
16. 显示网络连接的计时器信息:
```
netstat -o
```
这会显示与网络连接关联的计时器信息,如定时器状态和持续时间。
示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 0 localhost:631 *:* LISTEN timewait (0.00/0/0)
tcp6 0 0 [::]:ssh [::]:* LISTEN timewait (0.00/0/0)
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN timewait (0.00/0/0)
```
17. 显示指定进程相关的连接信息:
```
netstat -p <pid>
```
这会显示指定进程 ID(PID)相关的连接信息。
示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:631 *:* LISTEN 1234/cupsd
tcp6 0 0 [::]:ssh [::]:* LISTEN 5678/sshd
tcp6 0 0 ip6-localhost:631 [::]:* LISTEN 1234/cupsd
```
18. 显示多播组信息:
```
netstat -g
```
这会显示当前系统中的多播组信息。
示例输出:
```
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
eth0 1 all-systems.mcast.net
```
四、注意事项:
- 需要 root 权限进行操作,以便获取完整的信息。
- netstat 命令可能会产生大量输出,可以通过管道和过滤命令来筛选所需信息。