如何在 Linux 中查詢開放埠?


在解釋如何在 Linux 中列出所有開放網路埠之前,我們將簡要討論計算機網路中的埠。在計算機網路和軟體術語中,埠是一個表示網路應用程式的邏輯實體。埠是一個用於透過數字識別網路服務的術語。

埠充當 Linux 作業系統的通訊端點,以識別特定的程序或應用程式。埠是一個 16 位(0 到 65535)數字,用於區分一個正在執行的網路應用程式與其他應用程式。我們可以將這些埠號分為三類,

  • 知名埠 (0 到 1023)

  • 註冊埠 (1024 到 49151)

  • 臨時埠 (49152 到 65535)

知名埠

埠號 0 到 1023 用於標準 TCP/IP 伺服器端應用程式,被稱為知名埠。瞭解知名埠允許客戶端應用程式識別對等伺服器主機上的相應伺服器應用程式程序。例如,埠 80 通常繫結到 HTTP 伺服器應用程式,埠 443 繫結到 HTTPS。

註冊埠

註冊埠對映到特定服務,但不是知名埠的一部分。此類埠通常表示特定的伺服器應用程式,並且通常為所有系統所接受。例如,MySQL 資料庫伺服器通常使用埠 3306

臨時埠

與伺服器網路應用程式一樣,客戶端網路程式也需要埠進行通訊,以便伺服器能夠在該特定埠上回復客戶端應用程式。臨時埠是在執行時分配給客戶端程式的動態埠,無需預先保留。

如何在您的機器上查詢埠和關聯的服務

Linux 中的 /etc/services 檔案儲存著服務及其對應埠的對映。您可以檢視 /etc/services 以檢查系統是否知道特定埠。以下命令將瞭解您的系統埠。

示例

$ cat /etc/services

輸出

您將獲得如下輸出。

winrm 47001/tcp # Windows Remote Management Service jvl-mactalk 47100/udp # Configuration of motors conneced to industrial ethernet dbbrowse 47557/tcp # Databeam Corporation dbbrowse 47557/udp # Databeam Corporation directplaysrvr 47624/tcp # Direct Play Server directplaysrvr 47624/udp # Direct Play Server ap 47806/tcp # ALC Protocol ap 47806/udp # ALC Protocol bacnet 47808/tcp # Building Automation and Control Networks bacnet 47808/udp # Building Automation and Control Networks nimcontroller 48000/tcp # Nimbus Controller nimcontroller 48000/udp # Nimbus Controller nimspooler 48001/tcp # Nimbus Spooler nimspooler 48001/udp # Nimbus Spooler nimhub 48002/tcp # Nimbus Hub nimhub 48002/udp # Nimbus Hub nimgtw 48003/tcp # Nimbus Gateway nimgtw 48003/udp # Nimbus Gateway

查詢 Linux 系統上的開放埠

有多種方法可以查詢系統上的開放埠。

  • 使用 netstat 工具

  • 使用 ss 工具

  • 使用 lsof 命令

讓我們逐一檢查所有方法

使用 netstat 工具

netstat 是一個常用的命令,用於從系統中獲取與網路相關的資訊。要列出系統上的所有開放埠,我們可以使用 netstat 命令。埠可以是處於不同狀態的 TCP 或 UDP 埠。例如,以下 netstat 命令與 lntu 開關一起使用可以列出所有 tcp 和 udp 埠,其中埠的狀態為監聽

示例

$ netstat -lntu

選項 –l − 它將僅列出監聽套接字

選項 –n − 它將以數字形式顯示埠號

選項 t − 它將列出 TCP 埠

選項 u − 它將列出 UDP 埠

輸出

您將獲得以下輸出

[root@localhost /]# netstat -lntu
Active Internet connections (only servers)
Proto   Recv-Q   Send-Q      Local Address   Foreign Address State
tcp      0      0 0.0.0.0:22     0.0.0.0:*    LISTEN
tcp      0      0 127.0.0.1:25   0.0.0.0:*    LISTEN

解碼此命令的輸出並不難。雖然第一列顯示它是 TCP 埠還是 UDP 埠,但“本地地址”和“外部地址”列分別告訴我們伺服器應用程式的 IP&埠和客戶端應用程式的 IP&埠。

0.0.0.0:22 => 伺服器在本地機器上執行,0.0.0.0 是分配給本地機器的所有 IP 的引用,22 是埠號

在監聽狀態下,“外部地址”不適用,因為任何客戶端 (0.0.0.0) 使用任何臨時埠 (*) 都可以連線到監聽埠。

使用 SS 工具

它是另一個調查套接字的工具,是 netstat 命令的最佳替代方案。

它還將列出系統上的所有開放埠。

示例

$ ss  lntu

輸出

[root@localhost /]# ss -lntu
Netid  State   Recv-Q  Send-Q  Local Address:Port
Peer Address:Port
udp    UNCONN    0   0      127.0.0.1:323
*:*
udp    UNCONN    0   0      [::1]:323
[::]:*
tcp    LISTEN    0   128    *:22
*:*
tcp    LISTEN    0   100    127.0.0.1:25
*:*
tcp    LISTEN    0   128    [::]:22
[::]:*
tcp    LISTEN    0   100    [::1]:25
[::]:*
[root@localhost /]#

使用 lsof 命令

讓我們執行以下命令以使用 lsof 檢查開放的 TCP 和 UDP 埠 −

lsof -i -P -n | grep LISTEN

-i − 查詢列出埠

-P − 禁止將埠號轉換為網路檔案的埠名稱。它可能會使 lsof 執行得更快一些。當埠名稱查詢無法正常工作時,它也很有用。

-n − 不使用 DNS 名稱

| grep LISTEN − 再次僅使用 grep 命令作為過濾器顯示 LISTEN 狀態下的埠。

[root@localhost /]# lsof -i -P -n | grep LISTEN
sshd 997 root 3u IPv4 16531 0t0 TCP *:22 (LISTEN)
sshd 997 root 4u IPv6 16543 0t0 TCP *:22 (LISTEN)
master 1242 root 13u IPv4 17202 0t0 TCP 127.0.0.1:25 (LISTEN)
master 1242 root 14u IPv6 17203 0t0 TCP [::1]:25 (LISTEN)

結論

在 Linux 中,有多種列出開放埠的方法。我建議嘗試前面提到的所有命令。Linux 專家通常使用 netstat 命令查詢開放的網路埠。

更新於: 2022-11-21

835 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.