引言
Wireshark是IT技术人员必备大杀器,Wireshark分析数据包的能力十分强大,能够分析IT界的各种数据包。 本运维老狗利用和业务同学撕逼的空隙,总结了Wireshark数据包分析三板斧。
咱们以理服人,通过数据包的分析来证明系统没问题、网络没问题。每板斧都能砍透甩锅同学的脑门,让撕逼从此优雅从容。
好了,废话不多说,下面来展示三板斧。
第一板斧:参数设置功能使用
Wireshark默认的参数设置能够满足绝大多数的场景需求,但是咱们不能满足于此对吧,下面第一板斧介绍一些参数优化设置,让数据分析更深入。
1.协议参数的优化
A.相对序列号:系统默认使用相对序列号是为了在分析会话时,易读易看。
但这也会同学们带来困惑:序列号不是由随机生成的32bit数值作为初始值么,技术书中都是这么说的,怎么看到seq都是从1开始的呢?
咱们这里可以可通过去掉勾选,看到真实的序列号,达到书中的效果。
B.计算会话时间戳:开启后会显示首帧距此帧,上一帧距此帧的时间间隔。适用于排查业务超时类故障。
2.显示时间的调整
A.不同的同学可根据自己的阅读习惯具体调整每帧显示的时间格式及时间精度。
B.设置参考时间,将某帧设置为参考时间,后续的帧以此帧为基准时间。适用于排查业务超时类故障。
第二板斧:查找数据包、显示过滤器
Wireshark的功能强大的原因之一就是因为它有丰富的过滤条件表达式,能够准确过滤和分析出想要的数据信息。下面就第二板斧做详细介绍。
1.查找数据包
该模块只显示分组,并不进行过滤。点击"放大镜"按钮,出现显示过滤器的下拉框,下面给同学们展示下拉框中的四种过滤条件。
A."显示过滤器":查找包含符合过滤规则的帧。具体过滤条件在捕获过滤器中介绍。
B."十六进制":查找包含相应十六进制的帧。比如查找MAC地址。
C."字符串":查找包含相应字符串的帧。比如在报文中查找域名。
D."正则表达式":查找包含相应正则表达式的帧。正则表达式的详细用法,这里不做介绍,有兴趣的同学可移步百度自行学习。
E.标记数据包:对特定数据包进行标记。
下图中使用黑底白字标记了2233和2236两帧,方便在整个数据包查找。
同时,标记的数据包可以进行具体导出。也可导出两标记之间的数据包。如下图所示。
2.显示过滤器
显示过滤器会过滤出来符合条件的数据包,并加以显示。为了让同学们更好的掌握显示过滤器的用法,下面按照TCP/IP层级模型归类了常用的过滤器。
A.以太网过滤器
- eth.addr == e8:fc:af:f7:7e:35 #显示指定MAC地址的数据帧
- eth.src == e8:fc:af:f7:7e:35 #显示指定源MAC地址的数据帧
- eth.dst == e8:fc:af:f7:7e:35 #显示指定目的MAC地址的数据帧
- eth.type == 0x0800 #显示指定类型(这里显示TCP)的帧
B.IP过滤器
- ip #显示网络层为IP类型的数据包
- ip.addr = 192.168.0.1 #显示包含指定IP地址的数据包
- ip.src == 192.168.0.1 #显示包含指定源IP地址的数据包
- ip.dst == 192.168.0.1 #显示包含指定目的IP地址的数据包
- ip.len == 40 #显示包含指定长度(IP首部+数据部分)的IP数据包
C.传输层过滤器
- tcp #显示网络层为IP类型的数据包
- tcp.port == 80 #显示指定TCP端口的数据包
- tcp.src == 80 #显示指定TCP端口的数据包
- tcp.dst == 80 #显示指定TCP端口的数据包
- tcp.analysis.retransmission #显示TCP重传数据包
- tcp.analysis.duplicate_ack #显示TCP重复确认数据包
- tcp.analysis.zero_window #显示包含零窗口通告信息的TCP数据包
- tcp.connection.syn #显示TCP会话第一个包
- tcp.connection.rst #显示TCP会话的RST包
- tcp.flags.syn ==1 #显示TCP会话中SYN置位的包
- tcp.flags.reset ==1 #显示TCP会话中RST置位的包
- tcp.window_size < 100 #显示TCP窗口小于指定大小的包
- tcp.stream eq 10 #显示特定TCP流
- tcp.len == 20 #显示包含指定长度(TCP中的数据部分的长度)的TCP数据包
D.应用层过滤(以HTTP为例)
- http contains "XXXXX" #显示HTTP包中包含指定内容的数据包
- http.request.uri contains "XXXXX" #显示HTTP请求包中包含指定内容的数据包
- http.time >=0.1 #显示HTTP响应时间大于等于指定时间的数据包
- http.request #显示HTTP请求数据包
- http.respone #显示HTTP应答数据包
- http.response.code == 404 #显示代码为404的HTTP响应数据包
- http.content_length < 10 #显示HTTP的内容长度小于指定长度的数据包
- E.按时间过滤
- frame.time == "May 27, 2019 15:23:57.932344000"
- #显示特定时间的数据包
- frame.time >= "May 27, 2019 15:23:57.0" && frame.time < "May 27, 2019 15:23:58.0"
- #显示时间间隔的数据包
F.比较运算符
上面介绍了过滤器多用的是"==",其实还可以扩展,使用以下运算符。
- eq 或 == #等于
- ne 或 != #不等于
- gt 或 > #大于
- lt 或 < #小于
- ge 或 >= #大于等于
- le 或 <= #小于等于
第三板斧:统计与专家信息
前面两板斧都属于精准定位,是在有明确目标的情况下进行的。比如说咱们知道TCP有重传问题,咱们就用过滤器过滤出现RST包进行分析。
第三板斧属于整体的分析,通过统计和专家信息来判断数据包存在哪方面的问题,然后再用前两板斧进行精细诊断。
下面咱们具体学习第三板斧的使用。
1. 统计->已解析地址
如果咱们排查的是和公网通信的问题,可通过"已解析地址"查看地址对应的域名情况。
2.统计->对话
通过"对话"查找会话两端的IP地址,并可进行数据包的统计,确定不同会话的通信量。
3. 统计->I/O图表
通过"I/O图表"可以判断出数据包中整个会话周期或者特定时间段内的数据包情况,比如默认定义的数据包量的情况、错报的情况。也可自定义查询条件,个性化分析,比如下图就自定义了TCP重置的情况(下图红线部分)。
4. 统计->流量图
"流量图"可查看会话的流量情况。特别适合分析丢包、重传、重复ACK等情况。
5. 统计->HTTP->分组计数器
"分组计数器"可展示HTTP应答的情况,并进行数量统计。比如说200 OK的数量,404的数量等。非常直观的就能看到HTTP会话的应答情况。
6. 统计->TCP流图形
通过"TCP流图形"可以判断出数据包中整个会话周期或者特定时间段内会话的吞吐量、往返时间、窗口尺寸等情况。
下图展示了窗口尺寸,能够直观的看出在会话周期内接收窗口的大小和发出字节之间的变化情况。
7.定位TCP流
我们在分析数据包时,找到了有问题的一帧,想看看此帧所属的TCP流的情况。鼠标落在此帧上右击,找到"追踪流",选中"TCP流"即可过滤出此帧所属的TCP会话。
8.分析->专家信息
通过调试"专家信息",可展示出数据包所有分组的问题,并自动进行问题分级,便于查看数据包的错误情况。
找到相应的错误后,右击"作为过滤器应用"->"选中",即可过滤出该类型的所有数据包。下图过滤出了重复序列号的所有数据包。
总结
通过三板斧的学习,同学们一定迫不及待的想小试牛刀了吧。但又有同学会发现三板斧拿到手了,但TCPIP的原理不太精通,不知道如何使用好斧头。