📜  检查哪些端口是开放的 linux - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:40:33.199000             🧑  作者: Mango

检查哪些端口是开放的

常常需要检查哪些端口是开放的,这有助于优化服务器安全性、排除故障等问题。在 Linux 系统中,我们可以利用一些命令来检查开放的端口。

1. netstat

使用 netstat 命令可以列出系统中所有的端口及其状态,可以通过以下命令来列出开放的端口:

$ sudo netstat -tlnp

输出示例如下:

Active Internet connections (only servers)
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
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      2345/cupsd
tcp6       0      0 :::80                   :::*                    LISTEN      3456/httpd

其中,参数 -tlnp 用于指定输出 TCP 协议、显示端口号而非服务名、不解析地址、显示进程 ID 及其对应的程序名。

2. lsof

lsof 命令可以显示打开文件的列表,我们可以使用它来查找哪些程序正在使用某个端口。例如,以下命令可以显示所有正在监听端口的程序:

$ sudo lsof -i -P -n

输出示例如下:

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1234     root    3u  IPv4  12345      0t0  TCP *:22 (LISTEN)
sshd    1234     root    4u  IPv6  12346      0t0  TCP *:22 (LISTEN)
httpd   3456     apache  3u  IPv6  12347      0t0  TCP *:80 (LISTEN)

其中,参数 -i 指定列出网络相关的打开文件;-P-n 用于不将端口或 IP 地址转换为服务名或主机名。

3. ss

除了 netstatlsof,还可以使用 ss 命令来显示 socket 统计信息,包括监听的端口。例如,以下命令可以显示所有正在监听 TCP 端口的程序:

$ sudo ss -tlnp

输出示例如下:

State      Recv-Q Send-Q       Local Address:Port         Peer Address:Port Process      
LISTEN     0      128                  *:22                     *:*      users:(("sshd",pid=1234,fd=3))
LISTEN     0      128                  *:80                     *:*      users:(("httpd",pid=3456,fd=3))

其中,参数 -tlnpnetstat 的相同。

总的来说,可以结合使用以上命令来检查哪些端口是开放的。需要注意的是,在执行这些命令时需要管理员权限,也即需要使用 sudo 命令来运行这些命令。