9

Linux 查看端口占用

 1 year ago
source link: https://www.myfreax.com/check-listening-ports-linux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Linux 查看端口占用

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

Updated At 26 Sep 2022 5 min read
By myfreax
Linux 查看端口占用

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

本教程介绍了如何使用netstatsslsof命令找出进程正在的监听。教程适用于所有基于Linux和Unix的操作系统,包括macOS。

网络端口是由编号关联IP地址和通信协议TCP或UDP的类型标识。监听端口是应用程序或进程在其上监听的网络端口,充当通信端点。

每个监听端口都可以使用防火墙打开或关闭和过滤。一般而言,开放端口是一个网络端口,它接受来自远程计算机的连接。

您不能让两个服务监听同一IP地址上的同一端口。例如,如果您正在运行一个监听端口80443的Apache Web服务器,并且尝试安装Nginx

Nginx将无法启动,因为HTTP和HTTPS端口是已经被Apache Web服务器使用。

netstat是一个命令行工具,可以提供网络连接的信息,包括查看正在监听的端口。如果你系统没有安装netstat命令,请阅读教程Linux netstat命令安装

例如要列出所有正在监听的TCP或UDP端口,端口的服务和socket套接字状态,请运行命令sudo netstat -tunlp

这里解释一下此命令中使用的选项的含义。-t显示TCP端口。-u 显示UDP端口。-n显示数字地址而不是解释为主机名。

-l显示监听端口。-p显示监听该端口的进程PID和名称。仅当您以root用户或具有sudo权限的用户运行命令时,才会显示此信息。

sudo netstat -nputl
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd            

在我们的案例中,重要的几列是。Proto表示socket套接字使用的协议。Local Address进程监听的IP地址和端口号。PID/Program name进程PID和名称。

如果要过滤结果,请使用grep命令过滤输出。例如,查看TCP端口22的信息,可以运行命令sudo netstat -tnlp | grep :22

你将可以看到输出显示此计算机上的端口22被SSH服务进程sshd监听。如果输出为空,则表示没有进程监听该端口。

您也可以根据条件过滤列表,例如PID,协议,状态等。但netstat已过时,已被ssip命令取代,但它仍然是检查网络连接的最常用命令。

sudo netstat -tnlp | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd

ss 查看端口占用

ss是新的netstat,可用于查看指定端口的信息。它缺少netstat的某些功能,但是公开了更多的TCP状态,并且速度更快。

命令选项基本相同,因此从netstatss的转换并不困难。要使用ss获取所有监听端口的列表,请运行命令sudo ss -tunlp,输出与netstat报告的输出几乎相同。

sudo ss -tunlp
State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port                                                                                        
LISTEN   0        128              0.0.0.0:22             0.0.0.0:*      users:(("sshd",pid=445,fd=3))                                                        
....

lsof 查看端口占用

lsof是功能强大的命令行工具,可用于检查端口监听,可提供进程打开的文件信息。在Linux中,一切都是文件。

您可以将socket视为写入网络数据的文件。要使用lsof获取所有TCP端口监听的列表,请运行命令sudo lsof -nP -iTCP -sTCP:LISTEN

这里解释一下使用选项的含义。-n不要将端口号转换为端口名称。-p不解析主机名,显示数字地址。-iTCP -sTCP:LISTEN仅显示TCP状态为LISTEN的socket文件。

大多数输出​​列名称都可以一目了然,COMMANDPIDUSERFD是文件描述符,NAME端口号。

COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      445     root    3u  IPv4  16434      0t0  TCP *:22 (LISTEN)
sshd      445     root    4u  IPv6  16445      0t0  TCP *:22 (LISTEN)
apache2   515     root    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
mysqld    534    mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)
mysqld    534    mysql   33u  IPv6  19973      0t0  TCP *:33060 (LISTEN)
apache2   764 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
apache2   765 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
master    929     root   13u  IPv4  19637      0t0  TCP *:25 (LISTEN)
master    929     root   14u  IPv6  19638      0t0  TCP *:25 (LISTEN)

要查找正在监听的端口。例如端口3306的进程,可以运行命令sudo lsof -nP -iTCP:3306 -sTCP:LISTEN,输出显示MySQL服务器监听端口3306

更多信息,请访问lsof手册页,并了解此工具的其他强大功能。

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  534 mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)

我们向您展示了几个命令,可用于检查系统正在监听端口以及如何查找监听指定端口的进程。如果您有任何疑问或意见,请在下面发表评论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK