tshark的使用

wireshark

wireshark所有命令  linux下的wireshark包含多個處理報文的命令.

editcap

editcap,可以通過規則來過濾 pcap文件中的內容,並且將過濾結果保存到新文件中.

語法: editcap [options] ... <infile> <outfile> [ <packet#>[-<packet#>] ... ]

參考官網: editcap - Edit and/or translate the format of capture files

常用的命令行參數

-c <packets per file>  split the packet output to different files based on uniform packet counts

-i <seconds per file>,以時間間隔分割報文文件.

-A <start time> 選擇輸出報文的開始時間(格式:YYYY-MM-DD HH:MM:SS)

-B <stop time> 選擇輸出報文的結束時間(格式:YYYY-MM-DD HH:MM:SS)

-r 反向選擇操作


分割文件


#將pcap 文件分割成數據包數目相同的多個文件,< output-prefix >-NNNN的形式命名輸出文件.

editcap -c <packets-per-file><input-pcap-file><output-prefix>

#按照秒數分割報文文件, <output-prefix>_ nnnnn形式命名輸出文件.

editcap -i <seconds-per-file><input-pcap-file><output-prefix>


editcap i.pcap o.pcap 10 #提取i.pcap中第10個報文到o.pacp中.

editcap –r i.pcap o.pcap 10 #提取i.pcap中第10個報文之外的所有報文到o.pacp中.

editcap i.pcap o.pcap 401-500 #提取i.pcap中除401到500之外其餘所有報文到o.pacp中.

editcap -r i.pcap o.pcap 401-500 #提取i.pcap中第401到500共100個報文到o.pcap中.



tshark的使用

linux版wireshark命令是tshark,可以使用該命令抓取報文或解析報文,如同windows版的wireshark一樣.只是linux中使用的是命令tshark.  

tshark使用語法: tshark [options] ...


解析報文示例

使用tcpdump命令抓取報文:

tcpdump tcp -i eth1 -t -s 0 -c 100 and src port 80 -w target.pcap #注意一定要使用-w參數

生成的target.pcap報文文件可以使用tshark命令解析:

tshark –r target.pcap -a filesize:10 #簡單解析10K內容,顯示源/目標,ip,Seq,len,報文類型.

tshark –r target.pcap -a filesize:10 –V #解析10K內容,儘可能詳細,不顯示16進制內容,

tshark –r target.pcap -a filesize:10 –x –V #詳細解析10K內容,顯示16進制和ASII碼內容.


tshark常用的參數

Tshark 命令參數詳解  Tshark官網  過濾語法 DisplayFilters CaptureFilters 

Display Filter Reference  

-r <infile> 待解析的文件,不能是管道和控制檯輸入,必須是標準格式的文件.

-s <snaplen> 指定抓取的最大報文長度(也就是截取前snaplen字節).默認最大65535

-i <interface> 指定網絡接口. 如 -i eth0

-n/-nn 禁止網絡對象名稱解析

-f <capture filter>抓包的過濾條件.如-f 'tcp dst port 3306' 只抓取目的端口3306的tcp報文

-R <read filter>解析(顯示)過濾條件. 它後面的條件應該放到單引號中.

-x 解析時,以16進制和ASII碼顯示.

-w 將抓包的數據寫入文件filename中.

-q 安靜,在遠程時最有用,否則會抓到你自己SSH的報文.

-T 指出解析時輸出的格式,常用的是text,也是默認格式.也可以是fields,指出顯示某個域.

-e 指出顯示某個域.如: -T fields -e frame.time # -T fields必須有

-c <packet count> 指定抓取的報文數量,默認無限.

-a <autostop cond> 設置停止條件. duration:NUM-持續秒數; filesize:NUM-報文文件最大KB,到達這個數值停止抓包或切換到下一個文件; files:NUM-如果切換文件,切換的最大文件數量.

-b <ringbuffer opt> 設置切換文件的條件. duration:NUM-持續NUM秒切換到下一個文件; filesize:NUM文件達到NUM KB切換到下一個文件; files:NUM-切換NUM次後再從第一個開始(覆蓋).

-z <statistics> 統計

-l 在處理每個包時即時刷新輸出

-t 指定顯示哪個時間. ad-表示帶日期的絕對時間; a-表示不帶日期的絕對時間; r-表示從第一個包到現在的相對時間; d-表示兩個相鄰包之間的增量抓取時間(delta). dd-表示兩個相鄰包之間的增量顯示時間(delta_displayed). e-時間戳(Jan 1, 1970 00:00:00以來的秒數).缺省顯示相對時間(-r).如-t ad 輸出: 2016-08-06 00:00:02.752400..

-E <field print option>輸出控制符.必須使用-T fields. 它有下面幾個選項.

header=y|n  是否打印表頭(-e指定的字段名) 默認n

separator=/t|/s|<character> 指定分隔符. /t--tab字符(默認); /s--空格; 或自定義分隔符.

quote=d|s|n  指出是否使用引號(d-雙引號; s-單引號; n-不使用引號(默認))


常用的命令:

tshark -r xxx.pcap -t ad -n -T text -a filesize:10240

tshark -r xxx.pcap -T fields -e frame.time –n #僅顯示到達時間, -T fields必須有,-e指出域


顯示指定的字段/-T fields -e field

可以顯示指定的字段,此時需要用到-T和-e參數.

tshark -r xxx.pcap -T fields -E separator=';' -t ad -nn -e ip.src -e tcp.srcport -e ip.dst #輸出:

112.80.248.74;80;120.83.85.149  # 使用分號分割


-R <read filter>/過濾條件

-R後面的參數需要放在單引號中(如果參數比較簡單可省略單引號),如果參數中出現空格,需要放到雙引號中.例如:

tshark –r xxxx.pcap -nn -R '(tcp.flags.syn == 1 and tcp.flags.ack == 0)' #輸出:

712626 2016-08-06 06:45:56.311444  71.6.216.57 -> 221.4.179.202 TCP 80 …


協議過濾

tshark -r 221.4.179.202_20160806000002.pcap -nn -R 'tcp'  # 顯示tcp報文

tshark -r 221.4.179.202_20160806000002.pcap -nn -R 'http' #顯示http報文

tshark -r 221.4.179.202_20160806000002.pcap -nn -R 'tcp.port eq 80' #端口爲80的tcp報文.

tshark -r 221.4.179.202_20160806000002.pcap -nn -R 'ip.src_host == "221.4.179.202"' -t ad #ip

如果是ip,主要有下面的字段:

ip.host/ip.src_host/ip.dst_host # 字符串,如-R 'ip.src_host == "221.4.179.202"'

ip.addr/ip.src/ip.dst #不是字符串,而是一個ip地址整數(未確認)


-R <read filter>/時間過濾

tshark解析報文時可以使用frame字段,參考Protocol field name: frame,如: 

frame.cap_len,frame.protocols,frame.ref_time,frame.time,fame.time_delta等


幾個時間(命令: tshark -r xxx.pcap -n –V輸出)

    Arrival Time: Aug  4, 2016 00:00:03.026699000 # frame.time

    [Time delta from previous captured frame: 0.063950000 seconds]# frame.time_delta

# frame.time_delta_displayed

    [Time delta from previous displayed frame: 0.063950000 seconds]

    [Time since reference or first frame: 0.170489000 seconds] # frame.ref_time


fame.time_delta是相對於(文件)中第一個報文的抓取偏移時間,使用命令:

tshark -r xxx.pcap -R frame.time_delta=='0.021231' -t ad -n -T text –V #輸出的內容有:

[Time delta from previous captured frame: 0.021231000 seconds] #抓取偏移時間

參數 -R frame.time_delta=='0.021231' 可根據偏移時間找到對應的報文


fame.time_delta_displayed是相對於(文件)中第一個報文的顯示偏移時間,使用命令:

tshark -r xxx.pcap -R frame.time_delta_displayed=='0.021231' -t ad -n -T text –V #輸出有:

[Time delta from previous displayed frame: 0.063950000 seconds] #顯示偏移時間

參數-R frame.time_delta_displayed=='0.063950000'可根據偏移時間找到對應的報文.


frame.time是報文的到達時間(絕對時間),使用命令:

tshark –r xxx.pcap -R 'frame.time == "Aug 04,2016 00:00:02.856210000"' -n -T text –V

Arrival Time: Aug  4, 2016 00:00:02.856210000  #輸出的內容可以找到這一行

注意,-R中==右邊的值是一個時間,中間有空格,需要用雙引號.-R後面的參數需要用戶單引號,當然,參數可以是多個,如:

tshark -r xxx.pcap -R '(frame.time == "Aug 04,2016 00:00:02.856210000") || (frame.time == "Aug  4, 2016 00:00:02.909820000") ' -n -T text  # -R後面有2個參數,每個參數可用小括號




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章