1. 程式人生 > >tcpdump的基本用法之選項

tcpdump的基本用法之選項

需要在root使用者下使用,非root使用者可用sudo。 tcpdump -i eth1 -nn -X port 8080 -c 1 -i:i 是interface的含義,是指我們有義務告訴tcpdump希望它去監聽哪一個網絡卡。用ifconfig可以看到,一般不是eth0就是eth1。 -nn:是當tcpdump遇到協議號或埠號時,不要將這些號碼轉換成對應的協議名稱或者埠名稱。比如:21轉化成FTP。 -X:讓tcpdump把協議頭和包的內容都顯示出來,tcpdump會以16進位制和ASCII兩種形式顯示,方便協議分析。 port 8080:讓tcpdump監聽我們關心的某個目的埠或源埠為8080的資料包,忽略其他埠。 -c:即為count,設定tcp抓包的數目,在這裡設定為1,tcpdump只會抓一個數據包。
下面是示例:
上面是最普通的用法,下面介紹一些常用選項: tcpdump可以分為三大部分內容,第一是選項,第二是過濾表示式,第三是輸出資訊 選項: -e:增加乙太網幀頭部資訊輸出 示例: 如果沒有加-e引數輸出是這樣的:
加上-e引數後:
好吧,不只是變長了。其實增加了許多乙太網協議的資訊。 為了理解增加的資訊,我們可以來看一下乙太網協議的頭格式:
struct sniff_ethernet {
    u_char ether_dhost[ETHER_ADDR_LEN]; /* 目的主機的地址 */
    u_char ether_shost[ETHER_ADDR_LEN]; /* 源主機的地址 */
    u_short ether_type; /* IP? ARP? RARP? etc */
};
-e選項的輸出中,出現了oui Unknow的字樣,其實OUI,及Organizationally unique identifer,是”組織唯一識別符號“,在任何一塊網絡卡(NIC)中燒錄的6位元組MAC地址中,前3個 位元組體現了OUI,表明了NIC的製造組織。通常情況下,該識別符號是唯一的。 -l:使得輸出變為行緩衝 -l,不是-i,它的作用就是將”tcpdump“的輸出變為”行緩衝“的方式,這樣可以確保tcpdump遇到的內容一旦是換行符即將緩衝的內容輸出到標準輸出,以便於利用管道或重定向的方式進行後續處理。在linux系統中,它的標準I/O提供了全緩衝、行緩衝、無緩衝三種緩衝方式。標準錯誤不帶緩衝,比如cerr之於cout,終端裝置常為行緩衝,二其他情況預設都是全緩衝的。 在使用tcpdump時,對於tcpdump輸出的內容,提取每一行的第一個域,即”時間域“並輸出出來,為後續統計所用。這時就需要使用-l將預設的全緩衝變為行緩衝。

-t:輸出時不列印時間戳
-v:輸出更詳細的資訊 加了-v選項後,會有tos值,ttl值,id值,總長度,校驗值等。
-F:指定過濾表示式所在的檔案

tcpdump -i eth1 -nn -X port 8080 -c 1

其中port 8080就是過濾表示式,用於設定滿足的抓包條件。

但是當這個過濾條件墳場複雜,或者想將一個過濾表示式多次使用,可以把過濾表示式存入一個文字檔案中,就可以用-f選項。

舉例,port 8080


-w:將流量儲存到檔案中

網路流量分析有一個共同的需求,那就是流量儲存和流量回放。流量儲存就是把抓到的網路包能儲存到磁碟上,儲存下來,

為後續使用。流量回放,就是把歷史上某一時間段的流量,重新模擬回放出來,用於流量分析。


-w選項儲存的都是二進位制檔案,我們是看不懂的。那麼怎麼看呢?看下面這個選項。

-r:讀取raw packet檔案

這個選項實際上就是靠檔案中的內容對流量進行了回訪,就好像回到之前重新開始抓包。

由於是按照raw packet儲存的,所以完全可以通過-e -l等選項和過濾表示式對條件進行控制。


這樣,我們之前用-w儲存的檔案就被還原出來了。