Pre
端口是代表通信端点的逻辑实体,并与操作系统中的给定进程或服务相关联。在之前的文章中,我们解释了如何找出 Linux 中所有开放端口的列表,以及如何使用 Netcat 命令检查远程端口是否可达。
在这个简短的指南中,我们将展示在 Linux 中查找侦听特定端口的进程/服务的不同方法。
使用netstat命令
netstat(网络统计)命令用于显示有关网络连接、路由表、接口统计等的信息。它适用于所有类 Unix 操作系统,包括 Linux 以及 Windows 操作系统。
如果系统没有默认安装它,请使用以下命令进行安装。
$ sudo apt-get install net-tools [On Debian/Ubuntu & Mint]
$ sudo dnf install net-tools [On CentOS/RHEL/Fedora and Rocky Linux/AlmaLinux]
$ pacman -S netstat-nat [On Arch Linux]
$ emerge sys-apps/net-tools [On Gentoo]
$ sudo dnf install net-tools [On Fedora]
$ sudo zypper install net-tools [On openSUSE]
- 1
- 2
- 3
- 4
- 5
- 6
安装后,可以将其与 grep 命令一起使用,以查找在 Linux 中侦听特定端口的进程或服务,如下所示(指定端口)。
$ netstat -ltnp | grep -w ':80'
- 1
- 2
在上面的命令中,标志。
l – 告诉 netstat 只显示侦听套接字。
t – 告诉它显示 tcp 连接。
n – 指示它显示数字地址。
p – 启用进程 ID 和进程名称的显示。
grep -w – 显示精确字符串的匹配 (:80)。
注意:netstat 命令在某些 Linux发行版本中已被弃用并被现代的 ss 命令取代。
使用lsof命令
lsof 命令(List Open Files)用于列出 Linux 系统上所有打开的文件。
要在linux系统上安装它,请键入以下命令。
$ sudo apt-get install lsof [On Debian, Ubuntu and Mint]
$ sudo yum install lsof [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/lsof [On Gentoo Linux]
$ sudo pacman -S lsof [On Arch Linux]
$ sudo zypper install lsof [On OpenSUSE]
- 1
- 2
- 3
- 4
- 5
- 6
要查找侦听特定端口的进程/服务,请键入(指定端口)。
$ sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 2109359 root 4u IPv6 21371208 0t0 TCP *:http (LISTEN)
apache2 3445098 www-data 4u IPv6 21371208 0t0 TCP *:http (LISTEN)
apache2 3445099 www-data 4u IPv6 21371208 0t0 TCP *:http (LISTEN)
apache2 3445100 www-data 4u IPv6 21371208 0t0 TCP *:http (LISTEN)
apache2 3445101 www-data 4u IPv6 21371208 0t0 TCP *:http (LISTEN)
apache2 3445102 www-data 4u IPv6 21371208 0t0 TCP *:http (LISTEN)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
使用fuser命令
这个命令稍微冷门写,一般人都没用过。
fuser 命令显示在 Linux 中使用指定文件或文件系统的进程的 PID。
可以按如下方式安装它:
$ sudo apt-get install psmisc [On Debian, Ubuntu and Mint]
$ sudo yum install psmisc [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/psmisc [On Gentoo Linux]
$ sudo pacman -S psmisc [On Arch Linux]
$ sudo zypper install psmisc [On OpenSUSE]
- 1
- 2
- 3
- 4
- 5
你可以通过运行以下命令(指定端口)找到在特定端口上侦听的进程/服务。
$ sudo fuser 80/tcp
80/tcp: 2109359 3445098 3445099 3445100 3445101 3445102
$ sudo fuser 8000/tcp
8000/tcp: 2113624 2113631
- 1
- 2
- 3
- 4
- 5
然后像这样使用 ps 命令使用 PID 号查找进程名称。
$ ps -p 2109359 -o comm=
apache2
- 1
- 2
- 3
我所知道的常用办法就是这样了,有同行是否知道在 Linux 中查找侦听特定端口的进程/服务的任何其他方法,欢迎通过下面的评论区告诉我们。