我們知道徐许,tcpdump 也是最常用的一個(gè)網(wǎng)絡(luò)分析工具淆攻。它基于?libpcap?又沾,利用內(nèi)核中的 AF_PACKET 套接字归园,抓取網(wǎng)絡(luò)接口中傳輸?shù)木W(wǎng)絡(luò)包褂微;并提供了強(qiáng)大的過(guò)濾規(guī)則须床,幫你從大量的網(wǎng)絡(luò)包中翘单,挑出最想關(guān)注的信息场晶。
tcpdump 為你展示了每個(gè)網(wǎng)絡(luò)包的詳細(xì)細(xì)節(jié)拾并,這就要求揍堰,在使用前,你必須要對(duì)網(wǎng)絡(luò)協(xié)議有基本了解嗅义。而要了解網(wǎng)絡(luò)協(xié)議的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)細(xì)節(jié)屏歹,?RFC?當(dāng)然是最權(quán)威的資料。
不過(guò)之碗,RFC 的內(nèi)容蝙眶,對(duì)初學(xué)者來(lái)說(shuō)可能并不友好。如果你對(duì)網(wǎng)絡(luò)協(xié)議還不太了解褪那,推薦你去學(xué)《TCP/IP 詳解》幽纷,特別是第一卷的 TCP/IP 協(xié)議族。這是每個(gè)程序員都要掌握的核心基礎(chǔ)知識(shí)博敬。
回到 tcpdump 工具本身友浸,它的基本使用方法,還是比較簡(jiǎn)單的偏窝,也就是?tcpdump [選項(xiàng)] [過(guò)濾表達(dá)式]收恢。
當(dāng)然,選項(xiàng)和表達(dá)式的外面都加了中括號(hào)囚枪,表明它們都是可選的。
提示:在 Linux 工具中劳淆,如果你在文檔中看到链沼,選項(xiàng)放在中括號(hào)里,就說(shuō)明這是一個(gè)可選選項(xiàng)沛鸵。這時(shí)候就要留意一下括勺,這些選項(xiàng)是不是有默認(rèn)值缆八。
查看 tcpdump 的?手冊(cè)?,以及 pcap-filter 的手冊(cè)疾捍,你會(huì)發(fā)現(xiàn)奈辰,tcpdump 提供了大量的選項(xiàng)以及各式各樣的過(guò)濾表達(dá)式。
不過(guò)不要擔(dān)心乱豆,只需要掌握一些常用選項(xiàng)和過(guò)濾表達(dá)式奖恰,就可以滿足大部分場(chǎng)景的需要了。
為了幫你更快上手 tcpdump 的使用宛裕,我在這里也幫你整理了一些最常見的用法瑟啃,并且繪制成了表格,你可以參考使用揩尸。
首先蛹屿,來(lái)看一下常用的幾個(gè)選項(xiàng)。
在上面的 ping 案例中岩榆,我們用過(guò)?-nn?選項(xiàng)错负,表示不用對(duì) IP 地址和端口號(hào)進(jìn)行名稱解析。其他常用選項(xiàng)勇边,我用下面這張表格來(lái)解釋犹撒。
接下來(lái),我們?cè)賮?lái)看常用的過(guò)濾表達(dá)式粥诫。
我們使用??tcpdump -nn udp port 53 or host 35.190.27.188?油航,表示抓取 DNS 協(xié)議的請(qǐng)求和響應(yīng)包,以及源地址或目的地址為 35.190.27.188 的包怀浆。
其他常用的過(guò)濾選項(xiàng)谊囚,我也整理成了下面這個(gè)表格。
最后执赡,再次強(qiáng)調(diào) tcpdump 的輸出格式镰踏,我在前面已經(jīng)介紹了它的基本格式:
時(shí)間戳 協(xié)議 源地址. 源端口 > 目的地址. 目的端口 網(wǎng)絡(luò)包詳細(xì)信息
其中,網(wǎng)絡(luò)包的詳細(xì)信息取決于協(xié)議沙合,不同協(xié)議展示的格式也不同奠伪。所以,更詳細(xì)的使用方法首懈,還是需要你去查詢 tcpdump 的?man?手冊(cè)(執(zhí)行 man tcpdump 也可以得到)绊率。
不過(guò),講了這么多究履,你應(yīng)該也發(fā)現(xiàn)了滤否,tcpdump 雖然功能強(qiáng)大,可是輸出格式卻并不直觀最仑。特別是藐俺,當(dāng)系統(tǒng)中網(wǎng)絡(luò)包數(shù)比較多(比如 PPS 超過(guò)幾千)的時(shí)候炊甲,你想從 tcpdump 抓取的網(wǎng)絡(luò)包中分析問(wèn)題,實(shí)在不容易欲芹。
對(duì)比之下卿啡,Wireshark 則通過(guò)圖形界面,以及一系列的匯總分析工具菱父,提供了更友好的使用界面颈娜,讓你可以用更快的速度,擺平網(wǎng)絡(luò)性能問(wèn)題滞伟。