如何使用 netstat、lsof 和 nmap 检查 Linux 中的开放端口如何使用 netstat、lsof 和 nmap 检查 Linux 中的开放端口如何使用 netstat、lsof 和 nmap 检查 Linux 中的开放端口如何使用 netstat、lsof 和 nmap 检查 Linux 中的开放端口
  • 业务
  • 目标
  • 支持
  • 关于
  • 联系我们
  • 登录
✕

如何使用 netstat、lsof 和 nmap 检查 Linux 中的开放端口

发表 admin at 2025年2月28日
类别
未分类
标签

本文介绍如何使用 netstat、lsof 和 nmap 命令来查找哪些服务正在侦听哪些端口。

在对网络连接或特定于应用程序的问题进行故障排除时,首先要检查的事情之一应该是系统上实际使用的端口以及哪个应用程序正在侦听特定端口。

网络端口由其编号、关联的 IP 地址以及通信协议类型(例如 TCP 或 UDP)来标识。最重要的是,开放端口是应用程序或进程侦听的网络端口,充当通信端点。

每个侦听端口都可以使用防火墙打开或关闭(过滤)。一般来说,开放端口是接受来自远程位置的传入数据包的网络端口。

使用 netstat 检查开放端口

Netstat(网络统计)是一个命令行工具,用于监控传入和传出网络连接以及查看路由表、接口统计信息等。该工具对于 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 127.0.0.1:10024         0.0.0.0:*               LISTEN      24919/amavisd    
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      967/master   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      800/tinyproxy       
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      967/master          
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      844/pure-ftpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      768/sshd            
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      967/master          
tcp        0      0 0.0.0.0:993             0.0.0.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.0.0.0:47967           0.0.0.0:*                           460/avahi-daemon: r 
udp        0      0 127.0.0.1:123           0.0.0.0:*                           472/ntpd            
udp        0      0 0.0.0.0:123             0.0.0.0:*                           472/ntpd     
udp6       0      0 :::123                  :::*                                472/ntpd 

该命令中使用的选项含义如下:

  • -t:显示 TCP 端口。
  • -u:显示UDP端口。
  • -l:仅显示监听端口。
  • -n:显示数字地址而不是解析主机。
  • -p:显示监听进程的PID和名称。仅当您以 root 或 sudo 用户身份运行命令时才会显示此信息。

我们案例中的基本列是:

  • Proto – 套接字使用的协议。
  • 本地地址 – 进程侦听的 IP 地址和端口号。
  • PID/程序名称 – 进程的 PID 和名称。

此外,如果您想过滤结果,请使用 grep 命令。例如,要查找哪个进程在 TCP 端口 22 上侦听,您可以键入:

$ sudo netstat -tulnp | grep :22
tcp     0      0 0.0.0.0:22        0.0.0.0:*         LISTEN      768/sshd            
tcp6    0      0 :::22             :::*              LISTEN      768/sshd

如果输出为空,则表明端口上没有任何内容正在侦听。有关 Linux 中 netstat 命令的更多信息,请参阅其手册页。

使用 lsof 检查开放端口

Lsof 的意思是“列出打开的文件”,用于找出哪个进程打开了哪些文件。在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 127.0.0.1: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 127.0.0.1:783 (LISTEN)
/usr/bin/ 24911      root    6u  IPv6 25208449      0t0  TCP [::1]:783 (LISTEN)
spamd     24913      root    5u  IPv4 25208447      0t0  TCP 127.0.0.1:783 (LISTEN)
spamd     24913      root    6u  IPv6 25208449      0t0  TCP [::1]:783 (LISTEN)
/usr/sbin 24919    amavis    5u  IPv4 25208583      0t0  TCP 127.0.0.1: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 的网络文件。

要查找哪个进程正在侦听特定端口(例如端口 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。

有关 Linux 中 lsof 命令的更多信息,请参阅其手册页。

使用 nmap 检查开放端口

Nmap,或网络映射器,是一个用于网络探索和安全审计的开源Linux命令行工具。借助 nmap,服务器管理员可以快速显示主机和服务、搜索安全问题并扫描开放端口。

nmap 命令可用于检查单个端口或一系列端口是否打开。

以下是扫描目标系统上的 80 端口的方法:

$ sudo nmap -p 80 192.168.0.1
Nmap scan report for 192.168.0.1
Host is up (0.000073s latency).
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

扫描目标系统上的端口 1 到 200:

$ sudo nmap -p 1-200 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:42 EEST
Nmap scan report for 192.168.0.1
Host is up (0.0000080s latency).
Not shown: 196 closed ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
25/tcp open  smtp
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds

扫描(快速)最常见的端口:

$ sudo nmap -F 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:44 EEST
Nmap scan report for 192.168.0.1
Host is up (0.000014s latency).
Not shown: 89 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
443/tcp  open  https
465/tcp  open  smtps
587/tcp  open  submission
993/tcp  open  imaps
995/tcp  open  pop3s
3306/tcp open  mysql
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds

底线

总之,检查哪些端口是开放的,以及可以从接受这些端口上的连接的服务中获取哪些信息,可以为您提供锁定服务器所需的信息。

例如,从您的计算机泄露的任何无关信息都可能被恶意用户用来尝试利用已知漏洞或开发新漏洞。他们能弄清楚的越少越好。

©2015-2025 Norria Group support@norria.com