Linux伺服器抓包工具tcpdump示例詳解

千鋒IT教育發表於2022-11-15

Linux伺服器抓包工具tcpdump示例詳解,你是否正在嘗試捕獲資料包以分析網路上的流量?也許您是一名伺服器管理員,遇到了問題並想要監控網路上傳輸的資料。無論情況如何,tcpdump Linux 實用程式都是你所需要的。

在本文中,我們將詳細討論 tcpdump 命令,以及一些有關如何在 Linux 系統上安裝和使用 tcpdump 的指南。

什麼是 tcpdump 命令?

Tcpdump 是一個強大的網路監控工具,它允許使用者有效地過濾網路上的資料包和流量。您可以獲得有關 TCP/IP 和網路上傳輸的資料包的詳細資訊。Tcpdump 是一個命令列實用程式,這意味著您可以在沒有顯示的 Linux 伺服器上執行它。

系統管理員還可以將 tcpdump 實用程式與cron整合,以便自動執行各種任務,例如日誌記錄。由於其眾多功能使其非常通用,因此 tcpdump 既可以用作故障排除工具,也可以用作安全工具。

如何在 Linux 上安裝 tcpdump

雖然大多數時候您會發現 tcpdump 預裝在您的系統上,但某些 Linux 發行版並未隨附該軟體包。因此,您可能必須在系統上手動安裝該實用程式。

您可以使用which命令檢查系統上是否安裝了 tcpdump 。

┌──(linuxmi㉿linuxmi)-[~/]
└─$ which tcpdump

如果輸出顯示目錄路徑 ( /usr/bin/tcpdump ),則您的系統已安裝該軟體包。但是,如果沒有,您可以使用系統上的預設包管理器輕鬆完成。

要在基於 Debian 的發行版(例如 Ubuntu)上安裝 tcpdump:

┌──(linuxmi㉿linuxmi)-[~/]
└─$ sudo apt-get install tcpdump

在基於 Arch 的系統上,執行:

┌──(linuxmi㉿linuxmi)-[~/] 
└─$ sudo pacman -S tcpdump

要在 Fedora、CentOS 和 RHEL 上安裝 tcpdump 實用程式,請發出以下命令:

┌──(linuxmi㉿linuxmi)-[~/] 
└─$ sudo dnf install tcpdump

請注意,tcpdump 包需要libcap作為依賴項,因此請確保您也將其安裝在系統上。

在 Linux 上捕獲網路資料包的 Tcpdump 示例

現在您已經在 Linux 機器上成功安裝了 tcpdump,是時候監控一些資料包了。由於 tcpdump 需要超級使用者許可權才能執行大多數操作,因此您必須將sudo新增到您的命令中。

1.列出所有網路介面

要檢查哪些網路介面可用於捕獲,請在 tcpdump 命令中使用-D標誌。

tcpdump -D

將--list-interfaces標誌作為引數傳遞將返回相同的輸出。

┌──(linuxmi㉿linuxmi)-[~/]
└─$ sudo tcpdump --list-interfaces

輸出將是系統上存在的所有網路介面的列表。

獲得網路介面列表後,是時候透過捕獲系統上的資料包來監控網路了。儘管您可以指定要使用的介面,但any引數命令 tcpdump 使用任何活動介面捕獲網路資料包。

┌──(linuxmi㉿linuxmi)-[~/]
└─$ sudo tcpdump --interface any

2.tcpdump 輸出格式

從第三行開始,輸出的每一行表示 tcpdump 捕獲的特定資料包。這是單個資料包的輸出的樣子。

16:23:44.545056 eth0 Out IP linuxmi.40016 > 120.253.255.102.https: Flags [P.], seq 1007723650:1007723689, ack 1485464298, win 62780, length 39

請記住,並非所有資料包都以這種方式捕獲,但這是大多數資料包遵循的一般格式。

輸出包含以下資訊:

  • 接收資料包的時間戳
  • 介面名稱
  • 包流
  • 網路協議名稱
  • IP 地址和埠詳細資訊
  • TCP 標誌
  • 資料包中資料的序號
  • 確認資料
  • 視窗大小
  • 資料包長度

第一個欄位 ( 16:23:44.545056 ) 顯示系統傳送或接收資料包時的時間戳。記錄的時間是從您系統的本地時間中提取的。

第二個和第三個欄位表示使用的介面和資料包的流向。在上面的程式碼片段中,eth0是無線介面的名稱,Out是資料包流。

第四個欄位包括與網路協議名稱有關的資訊。通常,您會發現兩種協議- IP和IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。

下一個欄位包含 IP 地址或源和目標系統的名稱。IP 地址後跟埠號。

輸出中的第六個欄位由 TCP 標誌組成。tcpdump 輸出中使用了各種標誌。

標誌名稱 描述
SYN S 連線開始
FIN F 連線完成
PUSH O 資料被推送
RST R 連線已重置
ACK . 確認


輸出還可以包含多個 TCP 標誌的組合。例如,FLAG [f.]代表一個 FIN-ACK 包。

在輸出片段中進一步移動,下一個欄位包含資料包中資料的序列號 ( seq 1007723650:1007723689 )。第一個資料包總是有一個正整數值,隨後的資料包使用相對序列號來改善資料流。

下一個欄位包含確認號(ack 1485464298)或簡單的確認號。在傳送方機器中捕獲的資料包有 1485464298 作為確認號。在接收端,Ack 號是下一個資料包的值。

輸出中的第九個欄位包含視窗大小(win 62780),即接收緩衝區中可用的位元組數。視窗大小後面還有幾個其他欄位,包括最大段大小 (MSS)。

最後一個欄位(length 39)包含 tcpdump 捕獲的整個資料包的長度。

3.限制抓包數

第一次執行 tcpdump 命令時,您可能會注意到系統會繼續捕獲網路資料包,直到您傳遞中斷訊號。您可以透過使用-c標誌預先指定要捕獲的資料包計數來覆蓋此預設行為。

┌──(linuxmi㉿linuxmi)-[~/]
└─$ sudo tcpdump --interface any -c 3

上述命令將從任何活動的網路介面捕獲3個資料包。

4.根據欄位過濾資料包

當您對問題進行故障排除時,在終端上獲取大量文字輸出並不會使其變得更容易。這就是 tcpdump 中的過濾功能發揮作用的地方。您可以根據主機、協議、埠號等各種欄位過濾資料包。

要僅捕獲 TCP 資料包,請鍵入:

┌──(linuxmi㉿linuxmi)-[~/]
└─$ sudo tcpdump --interface any -c 5 tcp

同樣,如果要使用埠號過濾輸出:

┌──(linuxmi㉿linuxmi)-[~/]
└─$ sudo tcpdump --interface any -c 5 port 50

上述命令只會檢索透過指定埠傳輸的資料包。

要獲取特定主機的資料包詳細資訊:

tcpdump --interface any -c 5 host 112.123.13.145

如果要過濾特定主機傳送或接收的資料包,請在命令中使用src或dst引數。

tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145

您還可以使用邏輯運算子and和or將兩個或多個表示式組合在一起。例如,要獲取屬於源 IP 112.123.13.145的資料包並使用埠80:

tcpdump --interface any -c 10 src 112.123.13.145 and port 80

可以使用括號將複雜表示式組合在一起,如下所示:

tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.
234) and (port 45 or port 80)"

5.檢視包的內容

您可以在 tcpdump 命令中使用-A和-x標誌來分析網路資料包的內容。-A 標誌代表ASCII格式,-x表示十六進位制格式。

檢視系統捕獲的下一個網路資料包的內容:

tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x

6.將捕獲資料儲存到檔案

如果您想儲存捕獲資料以供參考,tcpdump 可以幫助您。只需使用預設命令傳遞-w標誌即可將輸出寫入檔案而不是在螢幕上顯示。

tcpdump --interface any -c 10 -w data.pcap

.pcap副檔名代表資料包捕獲資料。您還可以使用-v標誌以詳細模式發出上述命令。

tcpdump --interface any -c 10 -w data.pcap -v

要使用 tcpdump 讀取.pcap檔案,請使用-r標誌,後跟檔案路徑。-r代表讀取。

tcpdump -r data.pcap

您還可以從檔案中儲存的資料包資料中過濾網路資料包。

tcpdump -r data.pcap port 80

在 Linux 上監控網路流量

如果您被分配了管理 Linux 伺服器的任務,那麼 tcpdump 命令是一個很好的工具,可以包含在您的武器庫中。您可以透過實時捕獲網路上傳輸的資料包輕鬆解決與網路相關的問題。

但在此之前,您的裝置必須連線到網際網路。對於 Linux 初學者來說,即使透過命令列連線 Wi-Fi 也可能有點挑戰。但是,如果您使用正確的工具,那就輕而易舉了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70023145/viewspace-2923464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章