在 Linux 命令行中使用 tcpdump 命令分析網絡數據
tcpdump 是分析網絡和排查網絡問題的一個很好用的工具,它通過抓取數據包,顯示網絡的實時情況,并將結果輸出到標準輸出(STDOUT)上,也可以存儲在文件中。關于它的具體使用,它有很多可用的選項,本文我們介紹關于此命令常用的幾個核心選項。
1、檢查可用網口(interfaces)
查詢所有可用的網口,使用 -D 選項:
上述命令將會列出系統中所有可用的網絡接口,包括有線和無線接口,使用 --list-interfaces 選項也可以達到相同的目的:
運行結果如下圖所示:
2、抓取某個網口的數據包
不適用任選項的情況下,tcpdump 將會掃描所有網口,使用 -i 選項可抓取某個特定網口的數據:
在上述命令中 表示網口名稱。假如我們要抓取網口 eth0 的數據,可使用如下命令:
注:為了方便演示,我們后文中將會使用 eth0 或者 eth1 作為目標網口。
3、預設抓包數量
使用 -c 選項可以預設抓包的數量。比如,下面命令將會抓取 4 個數據包:
如果沒有預設抓包數量,需要使用 ctrl+c 或者 ctrl+z 手動停止抓包操作。
4、獲取詳細輸出
使用 -v 選項可以獲取詳細輸出,如下命令:
詳情的輸出,有個詳細程度的區別,換句話說,可以使用更多的 -v 標志,比如 -vv 或者 -vvv,這將會在終端上產生更加詳細的輸出:
5、以 ASCII 格式打印抓取到的數據
有時候我們希望數據以 HEX 或者 ASCII 格式展現,這里可以使用 -A 選項來表示以 ASCII 格式,-XX 選項表示以 ASCII 和 HEX 格式展示數據:
6、抓取從某個源 IP 發送的數據包
要抓取來自某個特定源 IP 的數據包,可使用如下命令:
比如,我們查看來自 IP 為 192.168.56.11 的數據:
上面例子中的計數 5 為只抓取5個數據包。
7、抓取發送到特定目標 IP 的數據包
如果要檢查發送到特定目標 IP 地址的流量,可使用以下命令:
比如我們將目標 IP 設為 192.168.56.11,查看流量的詳細信息:
8、在 tcpdump 中使用過濾選項
tcpdump 命令提供了一些過濾選項,以縮小抓包數據的范圍,這樣可以過濾掉一些不必要的數據,以便于分析數據。過濾方式包括主機地址、端口、協議或者其他過濾條件。下面我們來舉例說明。
端口
號 如果要執行端口號(比如端口22)過濾,可參照如下方式執行 tcpdump 命令:
此命令將抓取 TCP 和 UDP 數據流。
協議
與端口號類似,proto 指令根據特定流量過濾數據包捕獲。在這里,你可以使用協議名稱或協議編號作為參數值:
或者:
上面兩個命令是相同的,因為 6 是 TCP 的協議號。
主機過濾
host 參數使用特定主機的IP,篩選來自該主機的數據流:
這將捕獲來自此主機的所有流量。此外,還可以對主機應用多個過濾條件,以針對特定類型的數據包流量。 比如:
上面例子中,我將多個過濾條件合并到一個規則中,過濾 http 和 https 數據流,這兩個協議的端口分分別為 80 和 443。我們之前分享過一篇常見網絡端口的文字,感興趣的朋友可以參考:Linux中常見的網絡端口號
9、保存抓取到的數據
如果要保存抓取到的數據,可參考如下命令:
這里需要注意的是,最好將要抓取的數據包預設一個最小的值,否則需要手動停止該進程。
10,讀取抓取到的數據
我們可以使用 Wireshark(??https://www.wireshark.org/)或者其他圖形網絡分析工具分析抓取到的數據(上個例子中保存到.pcap文件中的數據)。此外,也可以使用?? tcpduimp 本身來讀取:
上文我們介紹了 tcpdump 命令的一些常見用法,希望可以幫助大家對該命令有一個大致的了解。當你進行數據包抓取的時候,這是一個很好用的工具。如果你想用更直觀的方式來分析數據包,可以試試 Wireshark。
以上就是我們本次分享全部內容,歡迎討論。