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

2022-06-02 17:14:49 浏览数 (1)

目录

  • 使用 netstat 检查开放端口
  • 使用 lsof 检查开放端口
  • 使用 nmap 检查开放端口

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

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

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

使用 netstat 检查开放端口

netstat (network statistics) 是一个命令行工具,用于监控传入和传出的网络连接以及查看路由表、接口统计信息等。这个工具非常重要,对于 Linux 网络管理员和系统管理员监控和排除与网络相关的故障非常有用问题并确定网络流量性能。

要列出正在侦听的所有 TCP 或 UDP 端口,包括使用这些端口的服务和套接字状态,请使用以下命令:

代码语言:javascript复制
> 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 和进程名称。

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

代码语言:javascript复制

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

如果输出为空,则表示端口上没有任何内容正在侦听。

使用 lsof 检查开放端口

lsof 意义 LiSt Open Files’ 用于找出哪些文件被哪个进程打开。在 Linux 中,一切都是文件。你可以将套接字视为写入网络的文件。

要使用 lsof 类型获取所有侦听 TCP 端口的列表:

代码语言:javascript复制
> 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 的网络文件。

要查找正在侦听特定端口的进程,例如端口 3306,你可以使用:

代码语言:javascript复制
> 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 检查开放端口

nmap, 或者 Network Mapper, 是用于网络探索和安全审计的开源 Linux 命令行工具。使用 nmap,服务器管理员可以快速展示主机和服务、搜索安全问题以及扫描开放端口。

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

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

代码语言:javascript复制
> 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

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

代码语言:javascript复制
> 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

0 人点赞