如何檢查在 Linux 上特定端口上運行的服務

有時,我們可能需要檢查特定服務/協議的默認端口號或在 Linux 上偵聽某些端口的服務。 許多命令行工具可用於幫助您在 Linux 系統中搜索端口名稱和編號。

1) 使用 Netstat 命令

Nestat 命令是用於檢查活動網絡連接、接口統計以及路由表的工具。 它在所有 Linux 發行版中都可用。 但是,對於最小安裝,您可以通過運行來安裝它

對於 RedHat 和 CentOS

sudo yum install net-tools

為了 Fedora 22 及以後

dnf install net-tools

對於 Debian/Ubuntu

sudo apt-get install net-tools

用法

要顯示 TCP 和 UDP 端點的詳細信息,請運行

netstat -pnltu

輸出

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      13878/mysqld
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      21487/memcached
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1208/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1032/master
tcp6       0      0 :::80                   :::*                    LISTEN      13625/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      1208/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1032/master
udp        0      0 0.0.0.0:64561           0.0.0.0:*                           569/dhclient
udp        0      0 0.0.0.0:68              0.0.0.0:*                           569/dhclient
udp        0      0 127.0.0.1:323           0.0.0.0:*                           525/chronyd
udp6       0      0 :::11200                :::*                                569/dhclient
udp6       0      0 ::1:323                 :::*                                525/chronyd
  • -p 標誌 給出進程 ID 和進程名稱。
  • -n 標誌顯示數字地址
  • -l 標誌顯示偵聽套接字
  • -t 標誌顯示 TCP 連接
  • -u 標誌顯示 UDP 連接

查找偵聽特定端口的服務運行

netstat -pnltu | grep -i "80"

輸出

tcp6       0      0 :::80                   :::*                    LISTEN      13625/httpd

同樣,要查找服務在運行時偵聽的端口

netstat -pnltu | grep -i "httpd"

輸出

tcp6       0      0 :::80                   :::*                    LISTEN      13625/httpd

2) 使用 fuser 命令

fuser 命令用於顯示在特定端口上運行的服務的進程 ID。
大多數係統默認不安裝它。 安裝它運行

對於 RedHat 和 CentOS

yum install psmisc

對於Fedoraa 22 及更高版本

dnf install psmisc

對於 Debian 和 Ubuntu

apt-get install psmisc

為了 example, 要查找運行在端口 80 上的 PID,請運行,

fuser 80/tcp

輸出

80/tcp:              13625 18390 18391 18392 18393 18394 18442 19926 24386

使用進程 PID run 搜索進程名稱

ps -p 13625 -o comm=

輸出

httpd

3) 使用 lsof 命令

lsof 命令可用於檢查活動的 TCP 和 UDP 端點。 安裝命令行工具

對於 RedHat 和 CentOS

yum install lsof

對於Fedoraa 22 及更高版本

dnf install lsof

對於 Debian 和 Ubuntu

apt-get install lsof

要使用 lsof run 顯示活動的 TCP 和 UDP 端點,

lsof -i

輸出

COMMAND     PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chronyd     525    chrony    1u  IPv4    14681      0t0  UDP localhost:323
chronyd     525    chrony    2u  IPv6    14682      0t0  UDP localhost:323
dhclient    569      root    6u  IPv4    15731      0t0  UDP *:bootpc
dhclient    569      root   20u  IPv4    15720      0t0  UDP *:64561
dhclient    569      root   21u  IPv6    15721      0t0  UDP *:11200
master     1032      root   13u  IPv4    17345      0t0  TCP localhost:smtp (LISTEN)
master     1032      root   14u  IPv6    17346      0t0  TCP localhost:smtp (LISTEN)
sshd       1208      root    3u  IPv4    18639      0t0  TCP *:ssh (LISTEN)
sshd       1208      root    4u  IPv6    18641      0t0  TCP *:ssh (LISTEN)
sshd       7749      root    3u  IPv4 11570561      0t0  TCP ip-172-31-16-136.us-east-2.compute.internal:ssh->197.232.61.206:51088 (ESTABLISHED)
sshd       7752  ec2-user    3u  IPv4 11570561      0t0  TCP ip-172-31-16-136.us-east-2.compute.internal:ssh->197.232.61.206:51088 (ESTABLISHED)
httpd     13625      root    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
mysqld    13878     mysql   14u  IPv4  7277635      0t0  TCP *:mysql (LISTEN)
httpd     18390    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18391    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18392    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18393    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18394    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18442    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     19926    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
memcached 21487 memcached   26u  IPv4  6250352      0t0  TCP localhost:memcache (LISTEN)
httpd     24386    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)

要顯示偵聽特定端口的進程/服務,請在指定端口時鍵入以下命令

lsof -i :80
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
httpd   13625   root    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18390 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18391 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18392 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18393 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18394 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18442 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   19926 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   24386 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)

4) 使用 Whatportis 工具

Whatportis 是一個命令行工具,可讓您搜索系統中運行的服務的端口名稱和數量。 該工具從以下位置獲取官方 TCP/UDP 端口列表 伊安娜 網站。 因此,創建了一個私有腳本來定期獲取網站並更新 端口文件 文件要使用命令行工具,我們首先要在我們的系統中安裝它。
首先,我們需要安裝python-pip

適用於 Ubuntu 16 及更高版本和 Debian 系統

apt install python-pip

對於 RHEL 和 CentOS 系統

安裝 EPEL 存儲庫

yum install epel-release

接下來,安裝python設置工具

sudo yum install python34-setuptools

安裝點

sudo easy_install-3.4 pip

最後,使用pip安裝whatportis

pip install whatportis

Whatportis的使用

要搜索與服務名稱相關聯的端口,請運行

whatportis service-name

為了 example

whatportis ssh

反之,可以搜索與端口號關聯的服務

whatportis 22

您還可以通過運行在不知道確切名稱的情況下搜索模式

whatportis ssh --like

您還可以將結果顯示為 JSON 輸出

whatportis 22 --json

另請閱讀

  • 如何在 Ubuntu Systemd/Upstart 中啟用或禁用服務

這就是我們今天的全部內容。 一如既往,我們珍惜您的想法,並隨時歡迎您的反饋。 請隨時通過下面的評論部分與我們聯繫。 感謝您的時間,並繼續關注更多信息豐富的教程。