如何检查Linux中的开放端口列表?

最近,我们就同一主题写了两篇文章。这些文章内容帮助你如何检查远程服务器中给定的端口是否打开。

如果你想 检查远程 Linux 系统上的端口是否打开 请点击链接浏览。如果你想 检查多个远程 Linux 系统上的端口是否打开 请点击链接浏览。如果你想 检查多个远程 Linux 系统上的多个端口状态 请点击链接浏览。

但是本文帮助你检查本地系统上的开放端口列表。

在 Linux 中很少有用于此目的的实用程序。然而,我提供了四个最重要的 Linux 命令来检查这一点。

你可以使用以下四个命令来完成这个工作。这些命令是非常出名的并被 Linux 管理员广泛使用。

netstat
nmap
ss
lsof

如何使用 Linux 命令 netstat 检查系统中的开放端口列表

netstat 是 Network Statistics 的缩写,是一个显示网络连接(进和出)相关信息命令行工具,例如:路由表、伪装连接、多播成员和网络端口。

它可以列出所有的 tcp、udp 连接和所有的 unix 套接字连接。

它用于发现发现网络问题,确定网络连接数量。

# netstat -tplugn
 
Active Internet connections(only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp0 0 0.0.0.0:25 0.0.0.0:*LISTEN2038/master
tcp0 0 127.0.0.1:199 0.0.0.0:*LISTEN1396/snmpd
tcp0 0 0.0.0.0:80 0.0.0.0:*LISTEN1398/httpd
tcp0 0 0.0.0.0:22 0.0.0.0:*LISTEN1388/sshd
tcp60 0 :::25 :::*LISTEN2038/master
tcp60 0 :::22 :::*LISTEN1388/sshd
udp0 0 0.0.0.0:39136 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:56130 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:40105 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:11584 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:30105 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:50656 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:1632 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:28265 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:40764 0.0.0.0:* 1396/snmpd
udp0 0 10.90.56.21:123 0.0.0.0:* 895/ntpd
udp0 0 127.0.0.1:123 0.0.0.0:* 895/ntpd
udp0 0 0.0.0.0:123 0.0.0.0:* 895/ntpd
udp0 0 0.0.0.0:53390 0.0.0.0:* 1396/snmpd
udp0 0 0.0.0.0:161 0.0.0.0:* 1396/snmpd
udp60 0 :::123 :::* 895/ntpd
 
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo1 224.0.0.1
eth01 224.0.0.1
lo1ff02::1
lo1ff01::1
eth01ff02::1
eth01ff01::1

你也可以使用下面的命令检查特定的端口。

# # netstat -tplugn| grep :22
 
tcp0 0 0.0.0.0:22 0.0.0.0:*LISTEN1388/sshd
tcp60 0 :::22 :::*LISTEN1388/sshd

如何使用 Linux 命令 ss 检查系统中的开放端口列表?

ss 被用于转储套接字统计信息。它也可以显示类似 netstat 的信息。相比其他工具它可以展示更多的 TCP 状态信息。

# ss -lntu
 
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp    UNCONN0 0 *:39136 *:*
udp    UNCONN0 0 *:56130 *:*
udp    UNCONN0 0 *:40105 *:*
udp    UNCONN0 0 *:11584 *:*
udp    UNCONN0 0 *:30105 *:*
udp    UNCONN0 0 *:50656 *:*
udp    UNCONN0 0 *:1632 *:*
udp    UNCONN0 0 *:28265 *:*
udp    UNCONN0 0 *:40764 *:*
udp    UNCONN0 0 10.90.56.21:123 *:*
udp    UNCONN0 0 127.0.0.1:123 *:*
udp    UNCONN0 0 *:123 *:*
udp    UNCONN0 0 *:53390 *:*
udp    UNCONN0 0 *:161 *:*
udp    UNCONN0 0 :::123 :::*
tcp    LISTEN0 100 *:25 *:*
tcp    LISTEN0 128 127.0.0.1:199 *:*
tcp    LISTEN0 128 *:80 *:*
tcp    LISTEN0 128 *:22 *:*
tcp    LISTEN0 100 :::25 :::*
tcp    LISTEN0 128 :::22 :::*

你也可以使用下面的命令检查特定的端口。

# # ss -lntu| grep ':25'
 
tcp    LISTEN0 100 *:25 *:*
tcp    LISTEN0 100 :::25 :::*

如何使用 Linux 命令 nmap 检查系统中的开放端口列表?

Nmap (“Network Mapper”) 是一个网络探索与安全审计的开源工具。它旨在快速扫描大型网络,当然它也可以工作在独立主机上。

Nmap 使用裸 IP 数据包以一种新颖的方式来确定网络上有哪些主机可用,这些主机提供什么服务(应用程序名称和版本),它们运行什么操作系统(版本),使用什么类型的数据包过滤器/防火墙,以及许多其他特征。

虽然 Nmap 通常用于安全审计,但许多系统和网络管理员发现它对于日常工作也非常有用,例如网络资产清点、管理服务升级计划以及监控主机或服务正常运行时间。

# nmap -sTU-O localhost
 
Starting Nmap 6.40 (http://nmap.org ) at 2019-03-20 09:57 CDT
Nmap scan report for localhost(127.0.0.1)
Host is up(0.00028s latency).
Other addresses for localhost(not scanned): 127.0.0.1
Not shown: 1994closed ports
 
PORT    STATE SERVICE
22/tcp  open ssh
25/tcp  open  smtp
80/tcp  open  http
199/tcp open  smux
123/udp open  ntp
161/udp open  snmp
 
Device type:general purpose
Running: Linux 3.X
OS CPE:cpe:/o:linux:linux_kernel:3
OS details: Linux 3.7 - 3.9
Network Distance: 0hops
 
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1IP address(1host up)scanned in 1.93seconds

你也可以使用下面的命令检查特定的端口。

# nmap -sTU-O localhost| grep 123
 
123/udp open  ntp

如何使用 Linux 命令 lsof 检查系统中的开放端口列表?

它向你显示系统上打开的文件列表以及打开它们的进程。还会向你显示与文件相关的其他信息。

# lsof -i
 
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
ntpd895ntp16u IPv4 18481 0t0UDP*:ntp
ntpd895ntp17u IPv6 18482 0t0UDP*:ntp
ntpd895ntp18u IPv4 18487 0t0UDP localhost:ntp
ntpd895ntp20u IPv4 23020 0t0UDP CentOS7.2daygeek.com:ntp
sshd 1388root3u IPv4 20065 0t0TCP*:ssh (LISTEN)
sshd 1388root4u IPv6 20067 0t0TCP*:ssh (LISTEN)
snmpd1396root6u IPv4 22739 0t0UDP*:snmp
snmpd1396root7u IPv4 22729 0t0UDP*:40105
snmpd1396root8u IPv4 22730 0t0UDP*:50656
snmpd1396root9u IPv4 22731 0t0UDP*:pammratc
snmpd1396root10u IPv4 22732 0t0UDP*:30105
snmpd1396root11u IPv4 22733 0t0UDP*:40764
snmpd1396root12u IPv4 22734 0t0UDP*:53390
snmpd1396root13u IPv4 22735 0t0UDP*:28265
snmpd1396root14u IPv4 22736 0t0UDP*:11584
snmpd1396root15u IPv4 22737 0t0UDP*:39136
snmpd1396root16u IPv4 22738 0t0UDP*:56130
snmpd1396root17u IPv4 22740 0t0TCP localhost:smux(LISTEN)
httpd1398root3u IPv4 20337 0t0TCP*:http(LISTEN)
master2038root13u IPv4 21638 0t0TCP*:smtp(LISTEN)
master2038root14u IPv6 21639 0t0TCP*:smtp(LISTEN)
sshd 9052root3u IPv4 1419955 0t0TCP CentOS7.2daygeek.com:ssh->Ubuntu18-04.2daygeek.com:11408 (ESTABLISHED)
httpd13371apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13372apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13373apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13374apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13375apache3u IPv4 20337 0t0TCP*:http(LISTEN)

你也可以使用下面的命令检查特定的端口。

# lsof -i:80
 
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd1398root3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13371apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13372apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13373apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13374apache3u IPv4 20337 0t0TCP*:http(LISTEN)
httpd13375apache3u IPv4 20337 0t0TCP*:http(LISTEN)