目录
- 使用 netstat 检查开放端口
- 使用 lsof 检查开放端口
- 使用 nmap 检查开放端口
在对网络连接或特定于应用程序的问题进行故障排除时,首先要检查的事情之一应该是系统上实际使用的端口以及哪个应用程序正在侦听特定端口。
网络端口由其编号、关联的 IP 地址和通信协议类型(例如 TCP 或 UDP)标识。最重要的是,开放端口是应用程序或进程侦听的网络端口,充当通信端点。
可以使用防火墙打开或关闭(过滤)每个侦听端口。一般而言,开放端口是接受来自远程位置的传入数据包的网络端口。
使用 netstat 检查开放端口
代码语言:javascript复制
netstat
(network statistics
) 是一个命令行工具,用于监控传入和传出的网络连接以及查看路由表、接口统计信息等。这个工具非常重要,对于 Linux 网络管理员和系统管理员监控和排除与网络相关的故障非常有用问题并确定网络流量性能。要列出正在侦听的所有 TCP 或 UDP 端口,包括使用这些端口的服务和套接字状态,请使用以下命令:
> sudo netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 11:10024 0:* LISTEN 24919/amavisd
tcp 0 0 0:587 0:* LISTEN 967/master
tcp 0 0 0:8080 0:* LISTEN 800/tinyproxy
tcp 0 0 0:465 0:* LISTEN 967/master
tcp 0 0 0:21 0:* LISTEN 844/pure-ftpd
tcp 0 0 0:22 0:* LISTEN 768/sshd
tcp 0 0 0:25 0:* LISTEN 967/master
tcp 0 0 0:993 0:* LISTEN 1001/dovecot
tcp6 0 0 :::3306 :::* LISTEN 823/mysqld
tcp6 0 0 ::1:783 :::* LISTEN 24911/spamd.pid -d
tcp6 0 0 :::80 :::* LISTEN 781/httpd
tcp6 0 0 :::21 :::* LISTEN 844/pure-ftpd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
tcp6 0 0 :::25 :::* LISTEN 967/master
tcp6 0 0 :::993 :::* LISTEN 1001/dovecot
tcp6 0 0 :::995 :::* LISTEN 1001/dovecot
udp 0 0 0:47967 0:* 460/avahi-daemon: r
udp 0 0 11:123 0:* 472/ntpd
udp 0 0 0:123 0:* 472/ntpd
udp6 0 0 :::123 :::* 472/ntpd
此命令中使用的选项具有以下含义:
-t
: 显示 TCP 端口。-u
: 显示 UDP 端口。-l
: 只显示监听端口。-n
: 显示数字地址而不是解析主机。-p
:显示侦听器进程的PID和名称。仅当你以 root 或 sudo 用户身份运行命令时才会显示此信息。
我们案例中的重要列是:
- Proto – 套接字使用的协议。
- Local Address - 进程侦听的 IP 地址和端口号。
- PID/程序名称 - PID 和进程名称。
代码语言:javascript复制此外,如果要过滤结果,请使用
grep
命令 。例如,要查找在 TCP 端口 22 上侦听的进程,你可以键入:
> sudo netstat -tulnp | grep :22
tcp 0 0 0:22 0:* LISTEN 768/sshd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
如果输出为空,则表示端口上没有任何内容正在侦听。
使用 lsof 检查开放端口
代码语言:javascript复制
lsof
意义LiSt Open Files’
用于找出哪些文件被哪个进程打开。在 Linux 中,一切都是文件。你可以将套接字视为写入网络的文件。要使用 lsof 类型获取所有侦听 TCP 端口的列表:
> sudo lsof -nP -iTCP -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 768 root 3u IPv4 16112 0t0 TCP *:22 (LISTEN)
sshd 768 root 4u IPv6 16114 0t0 TCP *:22 (LISTEN)
httpd 781 root 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 781 root 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
tinyproxy 800 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
tinyproxy 805 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
pure-ftpd 844 root 4u IPv4 16289 0t0 TCP *:21 (LISTEN)
pure-ftpd 844 root 5u IPv6 16290 0t0 TCP *:21 (LISTEN)
master 967 root 13u IPv4 17225 0t0 TCP *:25 (LISTEN)
master 967 root 103u IPv4 17319 0t0 TCP 11:10025 (LISTEN)
dovecot 1001 root 24u IPv4 18600 0t0 TCP *:995 (LISTEN)
dovecot 1001 root 37u IPv6 18623 0t0 TCP *:993 (LISTEN)
httpd 24344 apache 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 24344 apache 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
/usr/bin/ 24911 root 5u IPv4 25208447 0t0 TCP 11:783 (LISTEN)
/usr/bin/ 24911 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
spamd 24913 root 5u IPv4 25208447 0t0 TCP 11:783 (LISTEN)
spamd 24913 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
/usr/sbin 24919 amavis 5u IPv4 25208583 0t0 TCP 11:10024 (LISTEN)
/usr/sbin 24919 amavis 6u IPv6 25208584 0t0 TCP [::1]:10024 (LISTEN)
smtpd 28403 postfix 6u IPv4 17225 0t0 TCP *:25 (LISTEN)
smtpd 28403 postfix 7u IPv6 17226 0t0 TCP *:25 (LISTEN)
使用的选项如下:
-n
: 不要将端口号转换为端口名称。-P
: 不解析主机名,显示数字地址。-iTCP -sTCP:LISTEN
: 仅显示 TCP 状态为 LISTEN 的网络文件。
代码语言:javascript复制要查找正在侦听特定端口的进程,例如端口 3306,你可以使用:
> sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
输出显示 MySQL 服务器使用端口 3306。
使用 nmap 检查开放端口
代码语言:javascript复制
nmap
, 或者Network Mapper
, 是用于网络探索和安全审计的开源 Linux 命令行工具。使用 nmap,服务器管理员可以快速展示主机和服务、搜索安全问题以及扫描开放端口。
nmap
命令可用于检查单个端口或一系列端口是否打开。以下是在目标系统上扫描端口 80 的方法:
> sudo nmap -p 80 json.im
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-14 20:58 CST
Nmap scan report for json.im (150.109.147.28)
Host is up (0.040s latency).
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
代码语言:javascript复制扫描目标系统上的端口 1 到 200:
> sudo nmap -p 1-200 json.im
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-14 20:57 CST
Nmap scan report for json.im (150.109.147.28)
Host is up (0.046s latency).
Not shown: 193 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
135/tcp filtered msrpc
136/tcp filtered profile
137/tcp filtered netbios-ns
138/tcp filtered netbios-dgm
139/tcp filtered netbios-ssn
Nmap done: 1 IP address (1 host up) scanned in 4.49 seconds
代码语言:javascript复制扫描最常见的端口:
> sudo nmap -F json.im
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-14 20:57 CST
Nmap scan report for json.im (150.109.147.28)
Host is up (0.052s latency).
Not shown: 94 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
443/tcp open https
445/tcp filtered microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 2.56 seconds