Ubuntu netstat命令:查看網絡連接狀態

在Ubuntu系統中,我們經常需要查看網絡連接狀態、排查網絡問題或瞭解系統當前的網絡活動情況。這時候,netstat命令就派上用場了。它是一個強大的網絡工具,能夠顯示系統中所有的網絡連接、路由表、接口統計信息以及監聽端口等關鍵網絡數據。

一、安裝netstat(如果需要)

Ubuntu默認可能未安裝netstat命令,這是因爲它屬於net-tools工具包。如果執行netstat時提示“command not found”,請先安裝:

sudo apt update && sudo apt install net-tools

二、netstat的基本語法

netstat的基本語法格式爲:

netstat [選項] [協議/參數]

常用選項(參數)及作用如下,每個選項配合簡單示例說明:

三、常用參數及示例

1. 顯示所有連接(-a)

  • 作用:顯示系統中所有的網絡連接(包括TCP、UDP,已建立的、監聽的、關閉的等)。
  • 命令netstat -a
  • 說明:輸出內容較多,包含本地地址、外部地址、連接狀態等。例如:
  Active Internet connections (servers and established)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State
  tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
  tcp        0      52 192.168.1.100:22        192.168.1.101:54321     ESTABLISHED

2. 只顯示TCP協議連接(-t)

  • 作用:過濾出所有TCP協議的連接(忽略UDP等其他協議)。
  • 命令netstat -t
  • 說明:如果需要查看監聽狀態的TCP連接,可結合-l(監聽)參數:netstat -tl

3. 只顯示UDP協議連接(-u)

  • 作用:僅顯示UDP協議的連接(常用於排查DNS、NTP等UDP服務)。
  • 命令netstat -u

4. 以數字格式顯示端口和IP(-n)

  • 作用:不將IP地址解析爲主機名,端口號解析爲服務名(避免DNS查詢延遲,輸出更簡潔)。
  • 命令netstat -tn(TCP)或netstat -un(UDP)
  • 說明:例如,端口80會顯示爲“80”而非“http”,IP地址顯示爲數字格式(如192.168.1.100)。

5. 顯示進程ID和程序名(-p)

  • 作用:查看哪個進程佔用了特定端口或連接(需root權限)。
  • 命令sudo netstat -tunp
  • 說明:普通用戶執行時可能無法顯示進程信息,需加sudo。例如:
  tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1234/mysqld

這裏1234/mysqld表示MySQL進程(PID 1234)佔用了3306端口。

6. 顯示路由表(-r)

  • 作用:查看系統的路由規則(決定數據包如何轉發到其他網絡)。
  • 命令netstat -r
  • 說明:常用於排查網絡不通或路由配置問題。

四、實際應用場景

1. 快速查看所有監聽端口

想知道系統哪些端口在監聽連接(如Web服務的80端口、SSH的22端口):

sudo netstat -tuln
  • -t:TCP監聽端口
  • -u:UDP監聽端口
  • -l:監聽狀態
  • -n:數字格式
  • 輸出示例
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State
  tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
  tcp6       0      0 :::22                   :::*                    LISTEN
  udp        0      0 127.0.0.1:53            0.0.0.0:*

2. 排查特定端口是否被佔用

例如,想確認80端口是否被Web服務器(如Apache)佔用:

sudo netstat -tulnp | grep 80
  • 說明:若輸出包含LISTEN狀態,則說明80端口正被某個服務監聽。

3. 查看已建立的TCP連接

想了解當前系統與外部設備的已建立連接(如遠程服務器的SSH連接):

netstat -tan | grep ESTABLISHED
  • -a:所有連接
  • -n:數字格式
  • grep ESTABLISHED:只顯示已建立連接狀態

五、總結

netstat是Ubuntu網絡管理的基礎工具,掌握以下核心用法即可應對大部分場景:
- 查看監聽端口:sudo netstat -tuln
- 查看端口占用進程:sudo netstat -tunp
- 查看TCP連接:netstat -tan(或結合grep過濾狀態)
- 查看路由表:netstat -r

如果需要更詳細的網絡分析,還可以結合grepawk等工具進一步篩選數據。記住,使用-p參數時需加sudo獲取進程信息,這是排查端口占用問題的關鍵步驟。

小夜