wireshark分析篇(追踪异常流)
问题背景:
在我们处理问题的过程中,所有的网络、疑难问题最终的分析离不开抓包;我们最常用的抓包工具有tcpdump(linux)和wireshark(windows),但是我们分析抓包无疑用的最多的是wireshark;那么在分析抓包的过程中,如何找到异常的流,如何锁定在不同的网络设备上的抓包中的流信息的对应关系尤为重要,本文主要介绍了如何分析不同设备上的同一条流的几种常见的方法;
以下各个方法有不同的应用场景,无优先级之分,我们要根据实际不同问题、故障场景进行灵活调整分析方法,以达到尽可能快的分析数据包,定位故障原因并解决问题的目的;
1、时间戳
时间戳在wireshark中通过time列体现,是最简单、容易分析方法,但是时间戳并不能定位唯一的数据流,只能锁定大概范围,且一般用于client和waf等多个网络设备时间基本一致的情况下使用,要求时间误差在1秒内;若时间相差太大,反而会导致通过时间戳分析数据包难度增大,浪费较多时间在锁定异常包范围内,如下图1_1所示;
2、特定url
主要用于判断一个请求是否到了waf,以及waf对该请求做了什么操作,在常见的方法无效的情况下,我们一般建议客户端访问一个特定的url,同时在client和waf上抓包,通过wireshark的“放大镜”功能搜索对应的请求即可满足我们的需求,该场景下仅支持http协议包,https协议不适用该方法,因为https协议包内容是加密的,无法解析中间交互过程;
a、如下图2_1所示:客户端请求了一个202207171702目录的请求且返回了405的拦截;
b、如下图2_2所示在waf的抓包内通过放大镜搜索202207171702,即可定位到该url的请求(注意:为了尽可能搜索到更准确的信息,建议前面选项保持跟截图一致,即为分组字节流、宽窄、字符串);
3、id值
Identification:每个数据包的唯一标识;但这个值并不是一成不变的,当中间存在代理设备时,这个值很有可能会被改变;但是在部分场景下,我们依然可以通过这个值判断不同网络设备下的异常的tcp流;wireshark下常见过滤方法:ip.id==xx进行过滤
a、如下图3_1所示,在ip层中会显示id信息(0xf1c1或61889),我们可以使用ip.id==0xd9d0或者ip.id==55760进行过滤(效果一样,便于记忆我们一般使用10进制数字);
b、如下图3_2、3_3所示,使用id信息过滤client和waf上的包,然后追踪流,即可找到client和server同一条流信息
4、TTL值
Time to live:表示数据包的存活时间;代表ip数据包在计算机网络中可以转发的最大跳数,一般情况下,每经过一个路由器(部分其他网络设备:交换机、防火墙等)会减1,如果在ip包到达目的ip之前,该值变成0,那么网络设备会丢弃该包;比较常见的是windows系统和linux的默认ttl值为64,unix系统的默认ttl值为255;我们可以在比较复杂的网络架构场景中使用该值判断问题原因所在;
问题场景:websocket经过waf后无法正常使用;不经过waf的情况下正常;
网络拓扑:client--负载均衡--防火墙--ssl设备--各种交换路由设备--waf--server
a、如下图4_1所示,锁定异常抓包,客户端请求过滤后会出现大量服务端发来的reset报文(tcp.flags.reset==1),怀疑为服务端有设备存在异常的reset现象,且查看reset报文的ttl值为241;
b、如下图4_2、4_3所示,由于特殊原因,防火墙无法抓包,分别抓取负载均衡和ssl设备的抓包发现,负载均衡的抓包信息中reset报文是服务端方向发来的且ttl值为254,ssl设备的reset报文为客户端方向发来的且ttl为253,由此判断,发出reset报文的设备大概率是负载均衡和ssl卸载设备之间的设备,且大概率是防火墙问题导致;
5、源端口
源端口信息一般在wireshark的info字段显示,在中间不经过任何代理、nat转换设备的情况下(相邻设备),源端口一般是保持不变的,且短时间内的抓包不同的数据流基本上不会出现同一个源端口的情况;我们常用tcp.port==xx进行过滤;
a、从5_1图可以看出,客户端192.168.56.103通过源端口42186请求了192.168.56.108的目标端口,请求的url为/202207171702/shell.php;
其他:wireshark常见过滤方法?
-
- 过滤请求ip:ip.addr==x.x.x.x
-
- 过滤使用端口(包含源端口和目的端口):tcp.port==xx
-
- 过滤http协议:http
-
- 多个条件过滤:and或or,and代表同时满足,or代表满足其中之一即可