标签:linux tshark wireshark editcap 分割pcap
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个参数,每个参数可用小括号
本文出自 “零一小筑” 博客,请务必保留此出处http://jetyi.blog.51cto.com/1460128/1837248
标签:linux tshark wireshark editcap 分割pcap
原文地址:http://jetyi.blog.51cto.com/1460128/1837248