tcpdump 是一款強(qiáng)大的網(wǎng)絡(luò)抓包工具,它使用 libpcap 庫(kù)來(lái)抓取網(wǎng)絡(luò)數(shù)據(jù)包,這個(gè)庫(kù)在幾乎在所有的 Linux/Unix 中都有。今天簡(jiǎn)單跟大家分享下tcpdump的基礎(chǔ)使用。
01、基本使用語(yǔ)法
tcpdump 的常用參數(shù)如下:tcpdump -i eth0 -nn -s0 -v port 80
-i:選擇要捕獲的接口,通常是以太網(wǎng)卡或無(wú)線網(wǎng)卡,也可以是 vlan 或其他特殊接口。 如果該系統(tǒng)上只有一個(gè)網(wǎng)絡(luò)接口,則無(wú)需指定。
-nn:單個(gè) n 表示不解析域名,直接顯示 IP; 兩個(gè) n 表示不解析域名和端口。 這樣不僅方便查看 IP 和端口號(hào),而且在抓取大量數(shù)據(jù)時(shí)非常高效,因?yàn)橛蛎馕鰰?huì)降低抓取度。
-s0:tcpdump 默認(rèn)只會(huì)截取前 96 字節(jié)的內(nèi)容,要想截取所有的報(bào)文內(nèi)容,可以使用 -s number , number 就是你要截取的報(bào)文字節(jié)數(shù),如果是 0 的話,表示截取報(bào)文全部?jī)?nèi)容。
-v:使用 -v , -vv 和 -vvv 來(lái)顯示更多的詳細(xì)信息,通常會(huì)顯示更多與特定協(xié)議相關(guān)的信息。
port 80 : 這是一個(gè)常見(jiàn)的端口過(guò)濾器,表示僅抓取 80 端口上的流量,通常是 HTTP。
-p : 不讓網(wǎng)絡(luò)接口進(jìn)入混雜模式。 默認(rèn)情況下使用 tcpdump 抓包時(shí),會(huì)讓網(wǎng)絡(luò)接口進(jìn)入混雜模式。 一般計(jì)算機(jī)網(wǎng)卡都工作在非混雜模式下,此時(shí)網(wǎng)卡只接受來(lái)自網(wǎng)絡(luò)端口的目的地址指向自己的數(shù)據(jù)。 當(dāng)網(wǎng)卡工作在混雜模式下時(shí),網(wǎng)卡將來(lái)自接口的所有數(shù)據(jù)都捕獲并交給相應(yīng)的驅(qū)動(dòng)程序。 如果設(shè)備接入的交換機(jī)開(kāi)啟了混雜模式,使用 -p 選項(xiàng)可以有效地過(guò)濾噪聲。
額外介紹幾個(gè)常用語(yǔ)法參數(shù)
顯示 ASCII 字符串
-A 表示使用 ASCII 字符串打印報(bào)文的全部數(shù)據(jù),這樣可以使讀取更加簡(jiǎn)單,方便使用 grep 等工具解析輸出內(nèi)容。 -X 表示同時(shí)使用十六進(jìn)制和 ASCII 字符串打印報(bào)文的全部數(shù)據(jù)。這兩個(gè)參數(shù)不能一起使用。例如:tcpdump -A -s0 port 80
抓取特定協(xié)議的數(shù)據(jù)
后面可以跟上協(xié)議名稱來(lái)過(guò)濾特定協(xié)議的流量,以 UDP 為例,可以加上參數(shù) udp 或 protocol 17 ,這兩個(gè)命令意思相同。例如:tcpdump -i eth0 udp
抓取特定主機(jī)的數(shù)據(jù)
使用過(guò)濾器 host 可以抓取特定目的地和源 IP 地址的流量。例如:tcpdump -i eth0 host 10.10.1.1
將抓取的數(shù)據(jù)寫(xiě)入文件
使用 tcpdump 截取數(shù)據(jù)報(bào)文的時(shí)候,默認(rèn)會(huì)打印到屏幕的默認(rèn)輸出,你會(huì)看到按照順序和格式,很多的數(shù)據(jù)一行行快速閃過(guò),根本來(lái)不及看清楚所有的內(nèi)容。不過(guò),tcpdump 提供了把截取的數(shù)據(jù)保存到文件的功能,以便后面使用其他圖形工具(比如 wireshark,Snort)來(lái)分析。-w 選項(xiàng)用來(lái)把數(shù)據(jù)報(bào)文輸出到文件:tcpdump -i eth0 -s0 -w test.pcap
02、過(guò)濾器
當(dāng)我們?cè)谑褂?/span>tcpdump會(huì)發(fā)現(xiàn)網(wǎng)絡(luò)報(bào)文數(shù)量異常多,而我們關(guān)心的數(shù)據(jù)通常只占到其中很小的一部分,這個(gè)時(shí)候過(guò)濾器就起到了重要作用。它提供了靈活的魚(yú)飯可以精確的截取我們關(guān)系的數(shù)據(jù),簡(jiǎn)化分析的工作量。
Host 過(guò)濾器
Host 過(guò)濾器用來(lái)過(guò)濾某個(gè)主機(jī)的數(shù)據(jù)報(bào)文,例如:tcpdump host 127.0.0.1,該命令只會(huì)抓取所有與127.0.0.1發(fā)生交互的流量數(shù)據(jù),如果只想抓取該主機(jī)發(fā)出的流量,可以使用下面的命令:tcpdump src host 127.0.0.1
Network 過(guò)濾器
Network 過(guò)濾器用來(lái)過(guò)濾某個(gè)網(wǎng)段的數(shù)據(jù),使用的是 CIDR [2] 模式。可以使用四元組(x.x.x.x)、三元組(x.x.x)、二元組(x.x)和一元組(x)。四元組就是指定某個(gè)主機(jī),三元組表示子網(wǎng)掩碼為 255.255.255.0 ,二元組表示子網(wǎng)掩碼為 255.255.0.0 ,一元組表示子網(wǎng)掩碼為 255.0.0.0 。例如
抓取所有發(fā)往網(wǎng)段 192.168.1.x 或從網(wǎng)段 192.168.1.x 發(fā)出的流量:tcpdump net 192.168.1
抓取所有發(fā)往網(wǎng)段 10.x.x.x 或從網(wǎng)段 10.x.x.x 發(fā)出的流量:tcpdump net 10
和 Host 過(guò)濾器一樣,這里也可以指定源和目的:
tcpdump src net 10
因篇幅有限,本文就先講點(diǎn)基礎(chǔ)的,歡迎大家一起溝通交流!