測試必殺技之 linux 抓包神器 -tcpdump

測試常用抓包工具
作為測試人員因為要分析定位問題,總是不可避免的需要使用各種抓包工具,所以市面上的抓包工具也非常多:比如代理型的抓包工具 fiddler 和 Charles,比如功能強大的 Burpsuite,也有瀏覽器自帶的 F12,還有專注于網絡協議報文的 wireshark 等等。
這些工具各有所長,但是他們都有一個共同的特點,就是都有圖形化界面可操作,使用相對來說都還比較簡單。那么,如果在 Linux 操作系統(tǒng)的命令行模式下,沒有圖形化界面的時候,我們想要抓包,該怎么辦呢?
所有,今天我就給大家介紹一款非常好用的 Linux 命令行的抓包神器:tcpdump,一款可以根據使用者的定義對網絡上的數據包進行截獲的包分析工具。
tcpdump 要求的背景知識
要靈活使用 tcpdump 工具必須要有兩個必備的知識基礎:
第一、Linux 操作系統(tǒng):因為這是一款基于 Linux 系統(tǒng)下命令行的抓包工具,所以需要對 Linux 的基本操作和常用命令有一定的基礎;
第二、網絡知識:因為 tcpdump 是將網絡中傳送的數據包完整的截獲下來然后進行分析,所以想要分析捕獲到的報文,需要了解 OSI 七層網絡模型,以及常用網絡協議等。
tcpdump 的常用參數
tcpdump 這個工具有非常豐富的參數,可以提供不同的功能,滿足多樣的抓包需求。
不加任何參數
tcpdump
默認輸入 tcpdump 這個命令,回車操作之后,它將監(jiān)視第一個網絡接口上所有流過的數據包,一般是 eth0,如下圖所示:

監(jiān)視指定網絡接口的數據包
tcpdump -i eth1
一般情況下,我們可能關心的數據并不是 eth0 的接口,這時就需要指定端口進行數據包的捕獲。在 tcpdump 后面加一個 -i 的參數,后面跟具體需要捕獲的接口名稱,就可以抓取經過這個具體接口的所有數據包?!?/p>
監(jiān)視指定主機的數據包
tcpdump host 175.8.50.137
如果你非常明確關心的是哪個主機的收發(fā)報文,那么就可以直接過濾這個主機的數據包。 host 后面加主機的 IP 地址,就可以只抓取這個主機的所有數據包,其他主機的數據包就會被過濾掉。

如果需要捕獲該主機與特定某主機的交互數據包,可以用邏輯運算符來表示:
tcpdump host 175.8.50.137 and 100.27.48.1
這就表示只有主機 175.8.50.137 和 主機 100.27.48.1 的交互數據報文才會被捕獲到。
監(jiān)視指定協議和端口的數據包
tcpdump tcp port 22
加上具體某個協議的某個端口,就可以更加精確的捕獲對應的業(yè)務的數據報文了。如上,就會只抓取 TCP 協議的 22 端口的數據報,也就是 SSH 協議的數據報文:

顯示協議頭和包內容
tcpdump -X
加-X 參數,可以把協議頭和包內容都原原本本的顯示出來(tcpdump 會以 16 進制和 ASCII 的形式顯示),這在進行協議分析時是絕對的利器。

控制捕獲的數據包數量
tcpdump -c xxx
-c 參數,即 Count 的含義,設置希望 tcpdump 幫我們抓幾個包。如下圖,將最多捕獲 9600 個包:

保存捕獲到的數據包
tcpdump -w xxx
參數-w 直接將包寫入文件中,存儲到磁盤上,為后續(xù)使用。如下圖所示,就是將捕獲到的數據保存到 test.cap 的文件里:

停止抓包后,就可在當前目錄下看到保存的文件:

當然,這個保存的保存可以通過 xftp 傳出到本地,然后用 wireshark 工具可以打開,進行更加直觀的分析:

將流量進行回放
tcpdump -r xxx
參數-r 可以實現“流量回放”的功能,就是把歷史上的某一時間段的流量,重新模擬回放出來,用于流量分析。比如下圖所示:就是將上面捕獲保存的流量包 test.cap 進行回放:

總結
如果公司的服務在 Unix 類的系統(tǒng)里操作比較多,那么作為測試必然要經常使用命令行,也就必然要去分析一些 Linux 下的數據報文,定位問題和 bug,所以 tcpdump 這個工具就自然顯示出其用武之地了,功能非常強大,可以有輔助測試工作的進行!
本文作者:檸檬班tricy老師,轉載請注明出處!