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