📅  最后修改于: 2023-12-03 15:40:33.199000             🧑  作者: Mango
常常需要检查哪些端口是开放的,这有助于优化服务器安全性、排除故障等问题。在 Linux 系统中,我们可以利用一些命令来检查开放的端口。
使用 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 及其对应的程序名。
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 地址转换为服务名或主机名。
除了 netstat
和 lsof
,还可以使用 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))
其中,参数 -tlnp
跟 netstat
的相同。
总的来说,可以结合使用以上命令来检查哪些端口是开放的。需要注意的是,在执行这些命令时需要管理员权限,也即需要使用 sudo
命令来运行这些命令。