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個參數,每個參數可用小括號