在 Linux 上,端口是與操作系統上運行的服務相關聯的邏輯通信端點。這些端口完全由操作系統管理,每個端口都與特定的服務相關聯。該端口幫助管理員識別系統上運行的服務。

通常為每個端口分配一個編號。端口號為 0 到 65535。 將調用小於 1024 的端口 特權端口 用於特殊協議。例如,Web 流量 (HTTP) 通過端口 80,但 SSH 偵聽端口 22。 大於 1024 的端口將被調用 無特權的 可用於測試目的的端口。例如,您可以將 Web 服務器配置為在這些端口之一而不是默認端口號上運行。

本指南重點介紹如何找出 Linux 中的哪個進程正在偵聽哪個端口。演示使用 Ubuntu 20.04。

使用 netstat Linux 命令

Linux Netstat 命令是網絡和統計這兩個詞的組合。可以想像,這是一個命令行實用程序,用於在 Linux 系統上顯示網絡和協議統計信息。此外,您可以打印有關路由表、TCP 和 UDP 端點狀態以及網絡接口的信息。

要查看哪個進程正在偵聽特定端口,請使用以下語法:

# netstat -pnltu | grep -w port_number

讓我們分解選項列表。

p-顯示進程名稱和ID

n – 顯示端口地址

l – 僅列出監聽套接字

t – 打印 TCP 連接

打印 u-UDP 連接

以下示例正在探測正在偵聽端口 80 的服務。

# netstat -pnltu | grep -w 80

輸出顯示 Apache 是偵聽端口 80 的 Web 服務器服務。

檢查正在偵聽端口 3306 的服務。嵌入:

# netstat -pnltu | grep -w 3306

使用 lsof 命令

lsof 命令是 List Open Files 的首字母縮寫,用於顯示打開的文件和目錄。一起 -一代 選項。您可以查看正在偵聽特定端口的服務。

在以下示例中,TCP 端口 22,SSH (Secure Shell) 服務正在搜索偵聽服務。

# lsof -i TCP:22

使用 fuser 命令

最後是 fuser 命令。 Fuser Utility 是一個智能命令行工具,用於使用套接字、文件或目錄查找進程。它還做了很多事情,比如顯示進程的類型、每個進程的 PID 以及擁有該進程的用戶。

使用fuser找到監聽端口的服務,如圖,首先查找進程的PID。

# fuser 22/tcp

然後調用 ps 命令顯示服務的名稱。消息 34093 上一條命令得到的進程的PID

# ps -p 34093 -o comm=

結論是

我們已經描述了三種可用於識別正在偵聽 Linux 系統上特定端口的進程的方法。我希望這能正常工作。