Linux 如何查看 Listen Port 查出被占用的 Port?使用 netstat 指令教學與範例解說




在今天的數位世界中,網絡連接是極為重要的。了解如何監視和管理這些連接是網絡管理的一個重要部分。Netstat 是一個強大的指令,可以幫助你完成這項任務。在本文中,我們將探討 netstat 指令的使用教學、技巧以及提供一些實際範例來幫助你更好地理解它。

什麼是 netstat?

首先,讓我們明確了解 netstat 是什麼。Netstat 是網絡統計(network statistics)的縮寫,它是一個命令行工具,用於顯示和管理網絡連接、路由表、接口統計、Masquerade 連接等信息。它在各種操作系統中都有支持,包括 Windows、Linux 和 macOS。

基本的 netstat 命令

現在,讓我們來看一下如何使用基本的 netstat 命令來查看網絡連接。

打開終端(命令提示符)並輸入以下命令:

netstat
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN
udp        0      0 0.0.0.0:53              0.0.0.0:*

netstat 常見參數和用法

以下是 netstat 常見參數和用法整理:

選項描述
-t顯示 TCP 連接。
-u顯示 UDP 連接。
-n以數字形式顯示地址和 port,而不是域名和服務名稱。
-a顯示所有連接,包括正在聆聽和已建立的連接。
-p顯示與連接關聯的程序名稱和 PID。
-l顯示正在監聽的連接。
-r顯示路由表。
-i顯示網絡接口信息。

1. -t 選項 – 顯示 TCP 連接

使用 -t 選項,你可以查看所有的 TCP 連接。範例命令如下:

netstat -t
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.2:54321       203.0.113.1:443         ESTABLISHED
tcp        0      0 192.168.1.2:22           0.0.0.0:*                LISTEN

2. -u 選項 – 顯示 UDP 連接

使用 -u 選項,你可以查看所有的 UDP 連接。範例命令如下:

netstat -u
Proto Recv-Q Send-Q  Local Address           Foreign Address
udp        0      0  0.0.0.0:53              0.0.0.0:*
udp        0      0  0.0.0.0:67              0.0.0.0:*

3. -n 選項 – 以數字形式顯示地址和 port

使用 -n 選項,你可以以數字形式顯示地址和 port,而不是域名和服務名稱。範例命令如下:

netstat -n
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.2:54321       203.0.113.1:443         ESTABLISHED
tcp        0      0 192.168.1.2:22           0.0.0.0:*              LISTEN

4. -a 選項 – 顯示所有連接

使用 -a 選項,你可以查看所有連接,包括正在聆聽和已建立的連接。範例命令如下:

netstat -a
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 192.168.1.2:54321       203.0.113.1:443         ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN
udp        0      0 0.0.0.0:53              0.0.0.0:*

5. -p 選項 – 顯示與連接關聯的程序名稱和 PID

使用 -p 選項,你可以查看與連接關聯的程序名稱和 PID。範例命令如下:

netstat -p
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      1234/sshd
tcp        0      0 192.168.1.2:54321       203.0.113.1:443         ESTABLISHED  5678/myapp

6. -l 選項 – 顯示正在監聽的連接

使用 -l 選項,你可以查看正在監聽的連接。範例命令如下:

netstat -l
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN
udp        0      0 0.0.0.0:53              0.0.0.0:*

7. -r 選項 – 顯示路由表

使用 -r 選項,你可以查看系統的路由表。範例命令如下:

netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

8. -i 選項 – 顯示網絡接口信息

使用 -i 選項,你可以查看網絡接口信息。範例命令如下:

netstat -i
Kernel Interface table 
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 1234567 0 0 0 9876543 0 0 0 BMRU

netstat 實例

讓我們通過一些實際的範例來更好地理解 netstat 的應用。

查看特定 port 的連接

要查看特定 port 的連接,可以使用 -tulnp 選擇,後跟要查詢的 port 號:

netstat -tulnp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      1234/nginx

監控特定使用者的網絡活動

假設你是一個系統管理員,需要監控特定使用者的網絡活動,以確保他們不會濫用網絡資源。你可以使用以下命令來查看特定使用者的網絡連接:

netstat -tuln | grep -e 'ESTABLISHED' | awk '{print $4}' | awk -F: '{print $1}' | sort | uniq -c | sort -n
5 192.168.1.2
8 203.0.113.1
  1. netstat -tuln: 此部分使用 netstat 命令列出所有 TCP 連接。具體選項的含義如下:
    • -t: 顯示 TCP 連接。
    • -u: 顯示 UDP 連接。
    • -l: 顯示正在監聽的連接。
    • -n: 以數字形式顯示地址和 port,而不是域名和服務名稱。
  2. grep -e 'ESTABLISHED': 這一部分使用 grep 命令過濾只顯示已建立(ESTABLISHED)的連接。
  3. awk '{print $4}': 這個部分使用 awk 命令提取每個連接的第四列,這是包含 IP 地址和 port 的部分。
  4. awk -F: '{print $1}': 接下來,awk 命令再次使用,這次使用冒號(:)作為分隔符,提取每個連接中的 IP 地址的第一部分,即去掉了 port 部分。
  5. sort: 排序 IP 地址,以便進一步統計。
  6. uniq -c: 這個命令統計相同的 IP 地址出現的次數,並添加計數。
  7. sort -n: 最後,再次排序,但這次按照計數(出現次數)的數值進行升序排序。

這將顯示每個 IP 地址上已建立的連接數量,幫助你追蹤特定使用者的網絡活動。

監視伺服器的網絡流量和連接數

作為一個伺服器管理員,你可能需要同時監視伺服器的網絡流量和連接數,以確保伺服器運行正常且不受過度負載。你可以使用以下命令來實現這一目標:

netstat -i && netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -k2 -n
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0  1234567      0      0      0  9876543      0      0      0 BMRU

CLOSE_WAIT 1
ESTABLISHED 5
  1. netstat -i: 這一部分使用 netstat 命令列出網路介面的資訊,包括介面名稱(Iface)、最大傳輸單位(MTU)、Metric(Met)、接收的資料包(RX-OK)、接收錯誤的資料包(RX-ERR)、接收丟棄的資料包(RX-DRP)、接收溢位的資料包(RX-OVR)、傳送的資料包(TX-OK)、傳送錯誤的資料包(TX-ERR)、傳送丟棄的資料包(TX-DRP)、傳送溢位的資料包(TX-OVR)以及旗標(Flg)。
  2. &&: 這個符號允許我們在一行中依次執行多個指令。
  3. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -k2 -n: 這一部分使用 netstat 命令列出所有正在執行的 TCP 連線,然後使用 awk 命令統計各種連線狀態的數量,最後使用 sort 命令按照連線數量升序排序。具體步驟如下:
    • netstat -n: 這個部分列出所有 TCP 連線,並使用 -n 選項以數字形式顯示位址和埠。
    • awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}': 這個 awk 命令找到所有以 “tcp” 開頭的行(也就是 TCP 連線的行),並統計每種連線狀態(例如,ESTABLISHED、TIME_WAIT)的數量。最後,它列出了每種連線狀態和對應的數量。
    • sort -k2 -n: 最後,使用 sort 命令按照第二列(即連線數量)升序排序,以便按照連線數量列出連線狀態。

這將同時顯示伺服器的網絡接口信息以及不同狀態下的 TCP 連接數,有助於實時監視伺服器的狀態。

這些範例展示了更複雜的 netstat 應用情境,包括監控特定使用者的網絡活動以及同時監視伺服器的網絡流量和連接數。這些應用有助於系統管理員更全面地管理和監視網絡資源。如果你有任何進一步的問題或需要更多信息,請隨時告訴我。

延伸閱讀:如何使用 Linux 的 find 指令 ? 使用 find 的技巧與範例教學

延伸閱讀:如何列出目錄中的文件和子目錄 ? Linux ls 指令 3 分鐘教學與範例介紹





主頁 » LINUX » 實用技巧 » Linux 如何查看 Listen Port 查出被占用的 Port?使用 netstat 指令教學與範例解說

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *