如何检查Linux或者Unix是否正在使用端口

时间:2020-01-09 10:45:57  来源:igfitidea点击:

如何确定在Linux或者类Unix系统下是否正在使用端口?
如何验证Linux服务器上正在侦听哪些端口?
如何使用CLI检查Linux操作系统上的端口是否正在使用?
确认哪些端口正在侦听服务器网络接口上很重要。
您需要注意打开端口以检测入侵。
除了入侵之外,出于故障排除的目的,可能有必要检查服务器上其他应用程序是否已在使用端口。
例如,您可以在同一系统上安装Apache和Nginx服务器。
因此,有必要知道Apache还是Nginx使用的是TCP端口#80/443。
本快速教程提供了使用netstat,nmap和lsof命令检查正在使用的端口并查看正在使用该端口的应用程序的步骤。

如何检查端口是否在使用中

要在Linux上检查侦听端口和应用程序:

  • 在Linux上运行以下任一命令以查看打开的端口:sudo lsof -i -P -n | grep LISTENsudo netstat -tulpn | grep LISTENsudo lsof -i:22 ## 查看端口22sudo nmap -sTU -O IP-address-Here
  • 对于最新版本的Linux,请使用ss命令。例如,ss -tulw

让我们详细了解命令及其输出。

选项#1:lsof命令

语法为:

$ sudo lsof -i -P -n
$ sudo lsof -i -P -n | grep LISTEN
$ doas lsof -i -P -n | grep LISTEN ### [OpenBSD] ###

考虑上面输出的最后一行:

sshd    85379     root    3u  IPv4 0xffff80000039e000      0t0  TCP 10.86.128.138:22 (LISTEN)
  • sshd是应用程序的名称。
  • sshd应用程序绑定到的IP地址(10.86.128.138)(LISTEN)
  • 22是正在使用的TCP端口(LISTEN)
  • 85379是sshd进程的进程ID

选项2:netstat命令

您可以使用netstat检查侦听端口和应用程序,如下所示。

Linux netstat语法

与netrep命令一起运行netstat命令以过滤处于LISTEN状态的端口:

$ netstat -tulpn | grep LISTEN

在Linux上,不建议使用netstat命令一段时间。
因此,您需要使用ss命令,如下所示:

sudo ss -tulw
sudo ss -tulwn

其中ss命令选项如下:

  • -t:在Linux上仅显示TCP套接字
  • -u:在Linux上仅显示UDP套接字
  • -l:显示监听套接字。例如,SSHD服务器打开TCP端口22。
  • -p:列出打开套接字的进程名称
  • -n:不解析服务名称,即不使用DNS

FreeBSD/MacOS X netstat语法

$ netstat -anp tcp | grep LISTEN
$ netstat -anp udp | grep LISTEN

OpenBSD netstat语法

$ netstat -na -f inet | grep LISTEN
$ netstat -nat | grep LISTEN

选项#3:nmap命令

语法为:

$ sudo nmap -sT -O localhost
$ sudo nmap -sU -O 192.168.1.13 ##[ list open UDP ports ]##
$ sudo nmap -sT -O 192.168.1.13 ##[ list open TCP ports ]##

您可以在单个命令中组合TCP/UDP扫描:

$ sudo nmap -sTU -O 192.168.1.13

关于Windows用户的说明

您可以使用以下命令从Windows操作系统检查端口使用情况:

netstat -bano | more
netstat -bano | grep LISTENING
netstat -bano | findstr /R /C:"[LISTEING]"