wireshark

wireshark所有命令  linux下的wireshark包含多个处理报文的命令.

editcap

editcap,可以通过规则来过滤 pcap文件中的内容,并且将过滤结果保存到新文件中.

语法: editcap [options] ... [ [-] ... ]

参考官网: editcap - Edit and/or translate the format of capture files

常用的命令行参数

-c  split the packet output to different files based on uniform packet counts

-i ,以时间间隔分割报文文件.

-A 选择输出报文的开始时间(格式:YYYY-MM-DD HH:MM:SS)

-B 选择输出报文的结束时间(格式:YYYY-MM-DD HH:MM:SS)

-r 反向选择操作


分割文件


#将pcap 文件分割成数据包数目相同的多个文件,< output-prefix >-NNNN的形式命名输出文件.

editcap -c

#按照秒数分割报文文件, _ nnnnn形式命名输出文件.

editcap -i


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 待解析的文件,不能是管道和控制台输入,必须是标准格式的文件.

-s 指定抓取的最大报文长度(也就是截取前snaplen字节).默认最大65535

-i 指定网络接口. 如 -i eth0

-n/-nn 禁止网络对象名称解析

-f 抓包的过滤条件.如-f 'tcp dst port 3306' 只抓取目的端口3306的tcp报文

-R 解析(显示)过滤条件. 它后面的条件应该放到单引号中.

-x 解析时,以16进制和ASII码显示.

-w 将抓包的数据写入文件filename中.

-q 安静,在远程时最有用,否则会抓到你自己SSH的报文.

-T 指出解析时输出的格式,常用的是text,也是默认格式.也可以是fields,指出显示某个域.

-e 指出显示某个域.如: -T fields -e frame.time # -T fields必须有

-c 指定抓取的报文数量,默认无限.

-a 设置停止条件. duration:NUM-持续秒数; filesize:NUM-报文文件最大KB,到达这个数值停止抓包或切换到下一个文件; files:NUM-如果切换文件,切换的最大文件数量.

-b 设置切换文件的条件. duration:NUM-持续NUM秒切换到下一个文件; filesize:NUM文件达到NUM KB切换到下一个文件; files:NUM-切换NUM次后再从第一个开始(覆盖).

-z 统计

-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 输出控制符.必须使用-T fields. 它有下面几个选项.

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

separator=/t|/s| 指定分隔符. /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 /过滤条件

-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 /时间过滤

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个参数,每个参数可用小括号