Wireshark命令行工具tshark詳解(含例子)-01

Wireshark命令行工具tshark使用小記

一、目的

  寫這篇博客的目的主要是爲了方便查閱,使用wireshark能夠分析數據包,能夠經過編輯過濾表達式來達到對數據的分析;但個人需求是,怎麼樣把Data部分導出來,由於後續的工做主要針對數據包的Data部分,主要是對本地存儲的.pcap文件進行解析。這時候就會使用到tshark命令行工具,能夠經過命令提取本身想要的數據,能夠重定向到文件,也能夠結合上層語言好比Java,來調用命令行,實現對數據的處理!html

  下面我會從 相關實例、選項介紹、部分實例運行結果 進行歸納!java

二、首先咱們先來看一下網上的一些例子,我對這些例子進行了整理,並給出了說明。

//打印http協議流相關信息 tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'   註釋:     -s: 只抓取前512字節;     -i: 捕獲eth0網卡;     -n: 禁止網絡對象名稱解析;     -f: 只捕獲協議爲tcp,目的端口爲80;     -R: 過濾出http.host和http.request.uri;     -T,-e: 指的是打印這兩個字段;     -I: 輸出到命令行界面; //實時打印當前mysql查詢語句 tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query    註釋:     -R: 過濾出mysql的查詢語句; //導出smpp協議header和value的例子 tshark -r test.cap -R '(smpp.command_id==0x80000004) and (smpp.command_status==0x0)' -e smpp.message_id -e frame.time -T fields -E header=y >test.txt    註釋:
    -r: 讀取本地文件,能夠先抓包存下來以後再進行分析;
    -R: smpp...能夠在wireshark的過濾表達式裏面找到,後面會詳細介紹;
    -E: 當-T字段指定時,設置輸出選項,header=y意思是頭部要打印;
    -e: 當-T字段指定時,設置輸出哪些字段;
     >: 重定向; //統計http狀態 tshark -n -q -z http,stat, -z http,tree
   註釋:
    -q: 只在結束捕獲時輸出數據,針對於統計類的命令很是有用;
    -z: 各種統計選項,具體的參考文檔,後面會介紹,可使用tshark -z help命令來查看全部支持的字段;        http,stat: 計算HTTP統計信息,顯示的值是HTTP狀態代碼和HTTP請求方法。
       http,tree: 計算HTTP包分佈。 顯示的值是HTTP請求模式和HTTP狀態代碼。 //抓取500個包提取訪問的網址打印出來 tshark -s 0 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l -c 500    註釋:
    -f: 抓包前過濾;
    -R: 抓包後過濾;
    -l: 在打印結果以前清空緩存;
    -c: 在抓500個包以後結束; //顯示ssl data數據 tshark -n -t a -R ssl -T fields -e "ip.src" -e "ssl.app_data"
//讀取指定報文,按照ssl過濾顯示內容 tshark -r temp.cap -R "ssl" -V -T text
  註釋:
    -T text: 格式化輸出,默認就是text;
    -V: 增長包的輸出;//-q 過濾tcp流13,獲取data內容 tshark -r temp.cap -z "follow,tcp,ascii,13" //按照指定格式顯示-e tshark -r temp.cap -R ssl -Tfields -e "ip.src" -e tcp.srcport -e ip.dst -e tcp.dstport //輸出數據 tshark -r vmx.cap -q -n -t ad -z follow,tcp,ascii,10.1.8.130:56087,10.195.4.41:446 | more   註釋:
    -t ad: 輸出格式化時間戳; //過濾包的時間和rtp.seq tshark -i eth0 -f "udp port 5004" -T fields -e frame.time_epoch -e rtp.seq -o rtp.heuristic_rtp:true 1>test.txt
  註釋:
    -o: 覆蓋屬性文件設置的一些值;
//提取各協議數據部分 tshark -r H:/httpsession.pcap -q -n -t ad -z follow,tcp,ascii,71.6.167.142:27017,101.201.42.120:59381 | more

上面的例子已經涵蓋了大部分的選項,下面我針對每個選項進行簡要解釋,並給出這個選項經常使用的值;mysql

三、選項介紹

  在命令行下可使用tshark -help獲得選項的簡單介紹,具體的須要查閱官方文檔https://www.wireshark.org/docs/man-pages/tshark.htmlsql

捕獲接口:
  -i: -i <interface> 指定捕獲接口,默認是第一個非本地循環接口;   -f: -f <capture filter> 設置抓包過濾表達式,遵循libpcap過濾語法,這個實在抓包的過程當中過濾,若是是分析本地文件則用不到。   -s: -s <snaplen> 設置快照長度,用來讀取完整的數據包,由於網絡中傳輸有65535的限制,值0表明快照長度65535,默認也是這個值;
  -p: 混合模式工做,即只關心和本機有關的流量
  -B: -B <buffer size> 設置緩衝區的大小,只對windows生效,默認是2M;
  -y: -y<link type> 設置抓包的數據鏈路層協議,不設置則默認爲-L找到的第一個協議,局域網通常是EN10MB等;
  -D: 打印接口的列表並退出;
  -L 列出本機支持的數據鏈路層協議,供-y參數使用。

捕獲中止選項:
  -c: -c <packet count>
捕獲n個包以後結束,默認捕獲無限個;
  -a: -a <autostop cond.> ... duration:NUM,在num秒以後中止捕獲;
                   filesize:NUM,在numKB以後中止捕獲;
                  files:NUM,在捕獲num個文件以後中止捕獲; 捕獲輸出選項:
 
 -b <ringbuffer opt.> ... ring buffer的文件名由-w參數決定,-b參數採用test:value的形式書寫;
                 duration:NUM - 在NUM秒以後切換到下一個文件;
                 filesize:NUM - 在NUM KB以後切換到下一個文件;
                 files:NUM - 造成環形緩衝,在NUM文件達到以後;
RPCAP選項:
 
 remote packet capture protocol,遠程抓包協議進行抓包;
  -A: -A <user>:<password>,使用RPCAP密碼進行認證; 輸入文件:
  
-r: -r <infile> 設置讀取本地文件
處理選項:
  
-2: 執行兩次分析
  -R: -R <read filter>,包的讀取過濾器,能夠在wireshark的filter語法上查看;在wireshark的視圖->過濾器視圖,在這一欄點擊表達式,就會列出來對全部協議的支持。
  -Y: -Y <display filter>,使用讀取過濾器的語法,在單次分析中能夠代替-R選項;
  -n: 禁止全部地址名字解析(默認爲容許全部)
  -N: 啓用某一層的地址名字解析。「m」表明MAC層,「n」表明網絡層,「t」表明傳輸層,「C」表明當前異步DNS查找。若是-n-N參數同時存在,-n將被忽略。若是-n-N參數都不寫,則默認打開全部地址名字解析。   -d: 將指定的數據按有關協議解包輸出,如要將tcp 8888端口的流量按http解包,應該寫爲「-d tcp.port==8888,http」;tshark -d. 能夠列出全部支持的有效選擇器。
   輸出選項:
  
-w: -w <outfile|-> 設置raw數據的輸出文件。這個參數不設置,tshark將會把解碼結果輸出到stdout,「-w -」表示把raw輸出到stdout。若是要把解碼結果輸出到文件,使用重定向「>」而不要-w參數
  -F: -F <output file type>,設置輸出的文件格式,默認是.pcapng,使用tshark -F可列出全部支持的輸出文件類型。
  -V: 增長細節輸出;
  -O: -O <protocols>,只顯示此選項指定的協議的詳細信息。
  -P: 即便將解碼結果寫入文件中,也打印包的概要信息;
  -S: -S <separator> 行分割符
  -x: 設置在解碼輸出結果中,每一個packet後面以HEX dump的方式顯示具體數據
  -T: -T pdml|ps|text|fields|psml,設置解碼結果輸出的格式,包括text,ps,psmlpdml,默認爲text
  -e: 若是-T fields選項指定,-e用來指定輸出哪些字段;
  -E: -E <fieldsoption>=<value>若是-T fields選項指定,使用-E來設置一些屬性,好比
    header=y|n
    separator=/t|/s|<char>
    occurrence=f|l|a
    aggregator=,|/s|<char>
  -t: -t a|ad|d|dd|e|r|u|ud 設置解碼結果的時間格式。「ad」表示帶日期的絕對時間,「a」表示不帶日期的絕對時間,「r」表示從第一個包到如今的相對時間,「d」表示兩個相鄰包之間的增量時間(delta。   -u: s|hms 格式化輸出秒;
  -l: 在輸出每一個包以後flush標準輸出
  -q: 結合-z選項進行使用,來進行統計分析;
  -X: <key>:<value> 擴展項,lua_script、read_format,具體參見 man pages;
  
-z:統計選項,具體的參考文檔;tshark -z help,能夠列出,-z選項支持的統計方式。
  
其餘選項:
  
-h: 顯示命令行幫助;
  -v: 顯示tshark 的版本信息;


 四、部分命令測試

  在第三節我簡要介紹了tshark相關的命令,在這一節咱們主要測試幾個選項的輸出結果,來對命令加深理解。對於第三節的命令選項,比較重要的已經用藍色標出,方便查閱。windows

  使用tshark對數據包進行分析,主要是對過濾器的學習,根據本身的需求寫出響應的過濾器,來獲得相應的數據。緩存

  針對於個人需求,先抓包在分析,還想將命令行整合進java語言中,而後進行面向對象的分析,那麼就須要一些特別的命令來獲取一些數據:網絡

//1. 示例1,分析報文封裝的協議
  C:\Users\sdut>tshark -r H:\httpsession.pcap -T fields -e frame.number -e frame.protocols -E header=y
  --輸出  
  frame.number    frame.protocols
  1       eth:ethertype:ip:tcp
  2       eth:ethertype:ip:tcp
  3       eth:ethertype:ip:tcp
  4       eth:ethertype:ip:tcp:http
  5       eth:ethertype:ip:tcp
  6       eth:ethertype:ip:tcp:http:data-text-lines
  7       eth:ethertype:ip:tcp
  8       eth:ethertype:ip:tcp
  9       eth:ethertype:ip:tcp
  -e frame.number:顯示幀序號
  -e frame.time: 顯示時間,時間格式爲 Sep 21, 2016 17:20:02.233249000 中國標準時間
  -e frame.protocols: 顯示此數據包使用的協議
  -e ip.src: 顯示源ip,可是不能跟frame一塊兒用
  -e ip.dst: 顯示目的ip地址;
  -e tcp.port: 顯示端口號。
  ......還有不少,針對需求,一方面能夠本身經過wireshark軟件顯示的頭部字段來猜想,另外一方面能夠查閱文檔,https://www.wireshark.org/docs/dfref/,這裏面列出了全部支持的-e字段寫法,能夠在裏面搜索ip、frame上面咱們使用的這幾個就會搜到。

//2.示例2

  C:\Users\sdut>tshark -2 -r H:\httpsession.pcap -R "http.request.line || http.file_data || http.response.line" -T fields -e http.request.line -e http.file_data -e http.response.line -E header=y
  輸出:該例子輸出http協議的請求頭,響應頭,和響應數據;
  http.request.line  http.file_data  http.response.line
  ......          ......      ......
  具體的這個-R過濾寫法,能夠查看文檔,根據本身的需求來。https://wiki.wireshark.org/DisplayFilters
//3.示例3
  使用windows版本的tshark,抓包存儲到本地。每一個包只讀取1024字節。

  tshark -w E:/1015.pcap -s 1024 -i 本地鏈接 -q -F pcap ......

五、參考文獻

  tshark官方文檔:https://www.wireshark.org/docs/man-pages/tshark.htmlsession

  wireshark wiki:https://wiki.wireshark.org/app

  捕獲過濾器 https://wiki.wireshark.org/CaptureFilters異步

  顯示過濾器,用於display過濾的字段能夠經過https://wiki.wireshark.org/DisplayFilters 查詢。若是不過濾-e指定的字段數據都會輸出,經過-R過濾以後,只有知足規則的纔會輸出,會所以-R和-T、-e一般會一塊兒使用。

  統計:https://wiki.wireshark.org/Statistics

相關文章
相關標籤/搜索