netstat
要列出正在侦听的所有 TCP 或 UDP
端口,包括使用端口的服务和套接字状态,请使用以下命令:
此命令中使用的选项具有以下含义:
-t
- 显示 TCP 端口。
-u
- 显示 UDP 端口。
-n
- 显示数字地址而不是解析主机。
-l
- 只显示监听端口。
-p
- 显示监听进程的PID和名称。仅当您以 root 或sudo
用户身份运行命令时才会显示此信息。
输出将如下所示:
1 2 3 4 5 6 7 8 9
| 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 445/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master tcp6 0 0 :::3306 :::* LISTEN 534/mysqld tcp6 0 0 :::80 :::* LISTEN 515/apache2 tcp6 0 0 :::22 :::* LISTEN 445/sshd tcp6 0 0 :::25 :::* LISTEN 929/master tcp6 0 0 :::33060 :::* LISTEN 534/mysqld udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient
|
列的含义:
Proto
- 套接字使用的协议
Local Address
- 进程侦听的 IP 地址和端口号
PID/Program name
- PID 和进程的名称
如果要过滤结果,请使用 grep 命令。
1
| sudo netstat -tnlp | grep :22
|
输出显示这台机器上的 22 端口被 SSH 服务器使用:
1 2
| tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0 :::22 :::* LISTEN 445/sshd
|
如果输出为空,则表示端口上没有任何内容正在侦听。
您还可以根据条件过滤列表,例如 PID、协议、状态等。
ss
ss
是新的 netstat
。它缺少一些
netstat
特性,但暴露了更多的 TCP
状态,而且速度稍快。命令选项基本相同,因此从 netstat
到的转换 ss
并不困难。
要通过 ss
获取所有侦听端口的列表:
输出与 netstat
几乎相同:
1 2 3 4 5 6 7 8
| State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=929,fd=13)) LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=534,fd=30)) LISTEN 0 128 *:80 *:* users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=445,fd=4)) LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=929,fd=14)) LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=534,fd=33))
|
lsof
lsof
是一个强大的命令行实用程序,可提供有关进程打开的文件的信息。
在 Linux 中,一切都是文件。您可以将套接字视为写入网络的文件。
要获取所有侦听 TCP 端口的列表,lsof 类型为:
1
| sudo lsof -nP -iTCP -sTCP:LISTEN
|
使用的选项如下: * -n
- 不要将端口号转换为端口名称。 *
-p
- 不解析主机名,显示数字地址。 *
-iTCP -sTCP:LISTEN
- 仅显示具有 TCP 状态 LISTEN
的网络文件。
1 2 3 4 5 6 7 8 9 10
| COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN) sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN) apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN) mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN) mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN) apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN) master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
|
要查找正在侦听特定端口的进程,例如,3306您将使用的端口:
1
| sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
|
输出显示 MySQL 服务器使用端口3306:
1 2
| COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
|