天天看點

tshark簡單使用-wireshark

Ethereal是一個很流行的開源sniffer,支援包括solaris在内的很多平台。2006年初,主導Ethereal源碼的大牛GeraldCombs跳槽到了CACE公司。原來“Ethereal”的商标就不能用了。偉大的開源項目如果是以而over,不免同好者唏噓。怎麼辦?Combs等人隻得舍棄人氣既旺的Ethereal名号,将項目更名為Wireshark。它吸引了大多數原來Ethereal的contributor,從Ethereal的fork點0.99.1開始,繼續添加無數令人興奮的新功能。這個網際網路的放大鏡,展現給了我們一個生動卻又枯燥,溫馨伴着冷漠,充滿智慧的流量和陰謀的機關,不舍虛構而又看似真實的“以太”世界。

Ethereal的玩法如大多sniffer。更有趣之處在于它提供了指令行的抓包程式tethereal(現在改名為tshark)等一系列指令行工具,能夠無縫地融入unix/windows腳本語言,使嗅探、分析的工作更得強援。

tethereal/tshark位于圖形化軟體的相同目錄内。和大多數unix腳本一樣,它都提供了比較翔實的manpage(個人認為,可惜例子還是少了一點)。

以下試驗均基于windows平台的Wireshark,版本0.99.3。

基本文法:tshark[ -a <capture autostop condition> ] ...[ -b <capture ring buffer option>] ...[ -B <capture buffer size (Win32 only)> ] [ -c <capture packet count> ][ -d <layer type>==<selector>,<decode-as protocol> ][ -D ][ -f <capture filter> ][ -F <file format> ][ -h ][ -i <capture interface>|- ][ -l ][ -L ][ -n ][ -N <name resolving flags> ][ -o <preference setting> ] ...[ -p ][ -q ][ -r <infile> ][ -R <read (display) filter> ][ -s <capture snaplen> ][ -S ][ -t ad|a|r|d ][ -T pdml|psml|ps|text ][ -v ][ -V ][ -w <outfile>|- ][ -x ][ -X <eXtension option>][ -y <capture link type> ][ -z <statistics> ]

根據試驗,參數的書寫有講究。模仿tcpdump,可以把抓包過濾表達式寫在指令的最後。一般将抓包表達式用引号quote起來(在windows上是雙引号"),一是為了視覺友善,一是為了逃避其中字元和shell文法的沖突(如“>”,“||”等)。抓包過濾表達式也可以寫在-f參數的後面,注意,此時更應該使用引号或者将-f放在最後。否則,它們會認為-f(可省)後面的參數都是表達式的一部分,而導緻指令格式混亂。

主要參數分類含義權作解說如下:

1. 抓包接口類

  • -i設定抓包的網絡接口,不設定則預設為第一個非自環接口。
  • -D列出目前存在的網絡接口。在不了解OS所控制的網絡裝置時,一般先用“tshark-D”檢視網絡接口的編号以供-i參數使用。
  • -f 設定抓包過濾表達式(capture filterexpression)。抓包過濾表達式的寫法雷同于tcpdump,可參考tcpdump manpage的有關部分。
  • -s 設定每個抓包的大小,預設為65535,多于這個大小的資料将不會被程式記入記憶體、寫入檔案。(這個參數相當于tcpdump的-s,tcpdump預設抓包的大小僅為68)
  • -p 設定網絡接口以非混合模式工作,即隻關心和本機有關的流量。
  • -B 設定核心緩沖區大小,僅對windows有效。
  • -y設定抓包的資料鍊路層協定,不設定則預設為-L找到的第一個協定,區域網路一般是EN10MB等。
  • -L列出本機支援的資料鍊路層協定,供-y參數使用。   

2. 抓包停止條件

  • -c 抓取的packet數,在處理一定數量的packet後,停止抓取,程式退出。
  • -a 設定tshark抓包停止向檔案書寫的條件,事實上是tshark在正常啟動之後停止工作并傳回的條件。條件寫為test:value的形式,如“-aduration:5”表示tshark啟動後在5秒内抓包然後停止;“-afilesize:10”表示tshark在輸出檔案達到10kB後停止;“-afiles:n”表示tshark在寫滿n個檔案後停止。(windows版的tshark0.99.3用參數“-afiles:n”不起作用——會有無數多個檔案生成。由于-b參數有自己的files參數,所謂“和-b的其它參數結合使用”無從說起。這也許是一個bug,或tshark的manpage的書寫有誤。)

3. 檔案輸出控制

  • -b 設定ringbuffer檔案參數。ringbuffer的檔案名由-w參數決定。-b參數采用test:value的形式書寫。“-bduration:5”表示每5秒寫下一個ring buffer檔案;“-bfilesize:5”表示每達到5kB寫下一個ringbuffer檔案;“-b files:7”表示ringbuffer檔案最多7個,周而複始地使用,如果這個參數不設定,tshark會将磁盤寫滿為止。

4. 檔案輸入

  • -r設定tshark分析的輸入檔案。tshark既可以抓取分析即時的網絡流量,又可以分析dump在檔案中的資料。-r不能是命名管道和标準輸入。

5. 處理類

  • -R設定讀取(顯示)過濾表達式(read filterexpression)。不符合此表達式的流量同樣不會被寫入檔案。注意,讀取(顯示)過濾表達式的文法和底層相關的抓包過濾表達式文法不相同,它的文法表達要豐富得多,請參考http://www.ethereal.com/docs/dfref/和http://www.ethereal.com/docs/man-pages/ethereal-filter.4.html。類似于抓包過濾表達式,在指令行使用時最好将它們quote起來。
  • -n禁止所有位址名字解析(預設為允許所有)。
  • -N啟用某一層的位址名字解析。“m”代表MAC層,“n”代表網絡層,“t”代表傳輸層,“C”代表目前異步DNS查找。如果-n和-N參數同時存在,-n将被忽略。如果-n和-N參數都不寫,則預設打開所有位址名字解析。
  • -d 将指定的資料按有關協定解包輸出。如要将tcp8888端口的流量按http解包,應該寫為“-dtcp.port==8888,http”。注意選擇子和解包協定之間不能留白格。

6. 輸出類

  • -w設定raw資料的輸出檔案。這個參數不設定,tshark将會把解碼結果輸出到stdout。“-w-”表示把raw輸出到stdout。如果要把解碼結果輸出到檔案,使用重定向“>”而不要-w參數。
  • -F設定輸出raw資料的格式,預設為libpcap。“tshark-F”會列出所有支援的raw格式。
  • -V設定将解碼結果的細節輸出,否則解碼結果僅顯示一個packet一行的summary。
  • -x設定在解碼輸出結果中,每個packet後面以HEXdump的方式顯示具體資料。
  • -T設定解碼結果輸出的格式,包括text,ps,psml和pdml,預設為text。
  • -t設定解碼結果的時間格式。“ad”表示帶日期的絕對時間,“a”表示不帶日期的絕對時間,“r”表示從第一個包到現在的相對時間,“d”表示兩個相鄰包之間的增量時間(delta)。
  • -S在向raw檔案輸出的同時,将解碼結果列印到控制台。
  • -l在處理每個包時即時重新整理輸出。
  • -X 擴充項。
  • -q設定安靜的stdout輸出(例如做統計時)
  • -z 設定統計參數。

7. 其它

  • -h 顯示指令行幫助。
  • -v顯示tshark的版本資訊。
  • -o 重載選項。

在即時抓包模式(-r未設定)時的各參數功能一覽:

tshark簡單使用-wireshark

在檔案讀取分析模式時的各參數功能一覽:

tshark簡單使用-wireshark

出處:http://blog.sina.com.cn/s/blog_5919b8b10100064e.html

繼續閱讀