在Linux中使用tcpdump命令捕獲與分析資料包詳解
tcpdump 是linux系統中提供的一個命令列工具,可以將網路中傳送的資料包完全截獲下來,提供網路資料分析
前言
tcpdump 是一個有名的命令列資料包分析工具。我們可以使用 tcpdump 命令捕獲實時 TCP/IP 資料包,這些資料包也可以儲存到檔案中。之後這些捕獲的資料包可以通過 tcpdump 命令進行分析。tcpdump 命令在網路層面進行故障排除時變得非常方便。
tcpdump 在大多數 Linux 發行版中都能用,對於基於 Debian 的Linux,可以使用 apt 命令安裝它。
1 |
|
在基於 RPM 的 Linux 作業系統上,可以使用下面的 yum 命令安裝 tcpdump。
1 |
|
當我們在沒用任何選項的情況下執行 tcpdump 命令時,它將捕獲所有介面的資料包。因此,要停止或取消 tcpdump 命令,請鍵入 ctrl+c。在本教程中,我們將使用不同的例項來討論如何捕獲和分析資料包。
示例:1)從特定介面捕獲資料包
當我們在沒用任何選項的情況下執行 tcpdump 命令時,它將捕獲所有介面上的資料包,因此,要從特定介面捕獲資料包,請使用選項 -i,後跟介面名稱。
語法:
1 |
|
假設我想從介面 enp0s3 捕獲資料包。
輸出將如下所示,
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
示例:2)從特定介面捕獲特定數量資料包
假設我們想從特定介面(如 enp0s3)捕獲 12 個數據包,這可以使用選項 -c {數量} -I {介面名稱} 輕鬆實現。
1 |
|
上面的命令將生成如下所示的輸出,
N-Number-Packsets-tcpdump-interface
示例:3)顯示 tcpdump 的所有可用介面
使用 -D 選項顯示 tcpdump 命令的所有可用介面,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
我正在我的一個 openstack 計算節點上執行 tcpdump 命令,這就是為什麼在輸出中你會看到數字介面、標籤介面、網橋和 vxlan 介面。
示例:4)捕獲帶有可讀時間戳的資料包(-tttt 選項)
預設情況下,在 tcpdump 命令輸出中,不顯示可讀性好的時間戳,如果您想將可讀性好的時間戳與每個捕獲的資料包相關聯,那麼使用 -tttt 選項,示例如下所示,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
示例:5)捕獲資料包並將其儲存到檔案(-w 選項)
使用 tcpdump 命令中的 -w 選項將捕獲的 TCP/IP 資料包儲存到一個檔案中,以便我們可以在將來分析這些資料包以供進一步分析。
語法:
1 |
|
注意:副檔名必須為 .pcap。
假設我要把 enp0s3 介面捕獲到的包儲存到檔名為 enp0s3-26082018.pcap。
1 |
|
上述命令將生成如下所示的輸出,
1 2 3 4 5 6 7 8 |
|
捕獲並儲存大小大於 N 位元組的資料包。
1 |
|
捕獲並儲存大小小於 N 位元組的資料包。
1 |
|
示例:6)從儲存的檔案中讀取資料包(-r 選項)
在上面的例子中,我們已經將捕獲的資料包儲存到檔案中,我們可以使用選項 -r 從檔案中讀取這些資料包,例子如下所示,
1 |
|
用可讀性高的時間戳讀取包內容,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
示例:7)僅捕獲特定介面上的 IP 地址資料包(-n 選項)
使用 tcpdump 命令中的 -n 選項,我們能只捕獲特定介面上的 IP 地址資料包,示例如下所示,
1 |
|
上述命令輸出如下,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
您還可以使用 tcpdump 命令中的 -c 和 -N 選項捕獲 N 個 IP 地址包,
1 |
|
示例:8)僅捕獲特定介面上的 TCP 資料包
在 tcpdump 命令中,我們能使用 tcp 選項來只捕獲 TCP 資料包,
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
示例:9)從特定介面上的特定埠捕獲資料包
使用 tcpdump 命令,我們可以從特定介面 enp0s3 上的特定埠(例如 22)捕獲資料包。
語法:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
示例:10)在特定介面上捕獲來自特定來源 IP 的資料包
在 tcpdump 命令中,使用 src 關鍵字後跟 IP 地址,我們可以捕獲來自特定來源 IP 的資料包,
語法:
# tcpdump -n -i {介面名} src {IP 地址}
例子如下,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
示例:11)在特定介面上捕獲來自特定目的 IP 的資料包
語法:
# tcpdump -n -i {介面名} dst {IP 地址}
1 2 3 4 5 6 7 8 9 10 |
|
示例:12)捕獲兩臺主機之間的 TCP 資料包通訊
假設我想捕獲兩臺主機 169.144.0.1 和 169.144.0.20 之間的 TCP 資料包,示例如下所示,
1 |
|
使用 tcpdump 命令只捕獲兩臺主機之間的 SSH 資料包流,
1 |
|
示例:13)捕獲兩臺主機之間(來回)的 UDP 網路資料包
語法:
# tcpdump -w -s -i udp and \(host and host \)
1 |
|
示例:14)捕獲十六進位制和 ASCII 格式的資料包
使用 tcpdump 命令,我們可以以 ASCII 和十六進位制格式捕獲 TCP/IP 資料包,
要使用 -A 選項捕獲 ASCII 格式的資料包,示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
要同時以十六進位制和 ASCII 格式捕獲資料包,請使用 -XX 選項。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|