Wireshark明断葫芦案

A:我发了。

B:没收到。

A:我发了!

B:没收到!

A:我发了!发了!发了!

B:没收到!没收到!没收到!

B:计时器到了,看我kill you!

A:你,你,你,啊!...

几秒钟后,

A:一个崭新的我又来了!

B:再不按时发心跳,我还杀了你!

A:我不怕,我是九头怪,我是九尾猫。

B:计时器到了,看我再kill you!

A:你,你,你,啊!...

又过了几秒,

A:一个崭新的我又来了!

B:真讨厌,还能不能一起愉快滴干活了???

......

列位看官,上面这段不是小品,不是相声,而是一台主机上运行的A、B俩进程间的隔空喊话。为啥是隔空涅?因为原本他们之间正常的通信出了问题。

按照执行逻辑,A、B在主机中通过UDP协议进行通信,A不定时发送业务数据,定时发送心跳,B接收并计数。当B的接收计时器超时,认为A故障,B要先杀掉A,几秒钟后再重启A。如果重启A后,双方的通信还是不能恢复,就会出现这样循环往复的重启、等待、杀掉...

查看B的运行日志,终止A的原因确实是B的信息接收计时器超时,而A的运行日志则显示已经按时向B发送心跳信息。在排除了B接收计时出错的可能性之后,问题聚焦在A与B两进程之间的UDP通信上。

UDP是一种无连接的传输层协议,重效率轻可靠性,不提供数据包分组、组装,不能对数据包进行排序,因此当报文发送之后,是无法得知其是否安全完整到达的。如此一来,我们就难以断定到底是A进程的发送出了问题,还是B进程的接收出了问题。

这明面上是A、B两个进程间的较劲,实际上是两个软件的开发者在顶牛,谁都认为自己的软件没问题,bug当然都是别人的,如果纵容这么无休止的扯下去,必是一个无头葫芦案呀!既然当事双方互不认输,自然需要用其它方法来获得A、B之间实际的数据发送与接收情况,也就是要对网络通信数据包进行截获与分析。

一说到网络分析,当然要祭出Wireshark了!

那位看官问了:Wireshark何方神圣?可否担当此任?它比《石头记》里那个葫芦僧强在哪儿?

您且往下看:

Wireshark能够利用网卡的混杂模式(Promiscuous Mode),通过WinPcap接口直接获取网络数据包,不影响正常通信,端的是网络海洋中浑水摸鱼的神器。

它既支持TCP、UDP、HTTP等通用协议,也支持AppleTalk这样的高级协议,绝对的生冷不忌,荤素通吃。

它能够获取网络上的实时数据流,并快速生成与数据相关的协议、传输介质、通信通道等信息,好一个庖丁解牛、快字当头。

……

鉴于Wireshark拥有的强大而可靠的功能,利用它来分析A、B进程间的实际通信情况,化解顶牛扯皮,消除网络迷雾,明断是非,当是一个绝佳的选择。

抽丝剥茧之前,大伙先来看看A和B的开发与运行环境:


操作系统


Windows Server 2008 R2 Standard


运行平台


.NET v2.0


开发环境


Visual Studio 2005


编程语言


C#


通信方式


UDP协议,通过主机的IP地址192.168.1.16。


端口


A的发送端口由操作系统随机确定,B的接收端口为1024。

下面就让Wireshark出来走几步,勘察罪案现场,抓抓数据,录录口供:

这第一步叫“选择目标接口”:Wireshark具备同时对一台主机上的多个不同类型网络接口进行数据捕获的能力,为了避免有用的信息被淹没在海量的数据中,需要将目标接口限定在本案所关注的网卡上,也就是具有192.168.1.16地址的那个网卡。

这第二步是“设置捕获过滤器(Capture Filter)”:通过捕获过滤器可以让Wireshark只捕获满足条件的数据包。

本案使用的捕获过滤器表达式为:udp && src host 192.168.1.16。其含义是:只捕获UDP数据包,并且数据包的源地址是192.168.1.16。

这第三步称“设置显示过滤器(Display Filter)”:通过显示过滤器可以让Wireshark对已捕获的数据进一步筛选,并显示在用户界面上。

本案使用的显示过滤器表达式为:eth.dst == 40:f2:e9:9d:b9:d4 && udp.dstport eq 1024。其含义是:显示目标网卡的MAC地址是“40:f2:e9:9d:b9:d4”(也就是192.168.1.16对应的MAC地址),并且UDP目标端口是1024的数据包。

这第四步乃“捕获数据包”:Wireshark在执行实时数据捕获时,会将有效数据显示在界面的“数据包列表”、“数据包详情”、“数据包字节”三个区域中。数据包列表区中列出了所有符合过滤条件的数据包,内容为序号、时间、源地址、目标地址、协议类型等;数据包详情区会将用户在数据包列表区选中的某数据包的详细信息展示出来,包括各层协议的字段内容;数据包字节区以16进制形式显示出选中数据包的全部字节内容。

这第四步曰“创建图表”:本案关心的是数据发送与时间的关系,因此与数据包列表相比,数据统计图能更加直观的反映通信变化的趋势。Wireshark的兵器谱里有一款“IO Graph”正适合绘制这样的统计图。IO Graph的参数是可以定制的,例如将X轴定义为实际时间轴,1秒/刻度,刻度间隔10像素;Y轴定义为数据包数量轴,1包/刻度,最大刻度为10;数据过滤器表达式与显示过滤器表达式一致。

这最后一步便是“完成捕获”:如果捕获到了足够多的数据包,可以停止捕获,并将全部的捕获数据或者仅数据包列表区的数据保存成捕获文件,以便于进行后续的离线数据分析。

该查的查了,该问的问了,接下来咱们就要分析案情,升堂审理了。

通过查看B进程的运行日志,得知A进程在19:06:35出现过心跳发送超时现象。Wireshark绘制的相应时段IO Graph如下:

图中先出现尖峰,随后进入波谷并探底,最后又恢复正常。再查看对应时间段“数据包列表区”和“数据包详情区”显示的信息,A进程在19:06:27—19:06:30发送大量的业务信息,1秒钟后停止发送信息,在大约4秒后的19:06:35恢复正常,继续发送心跳信息。上述情况在后续长时间的捕获与分析中也多次反复出现,因此初步的结论是:A进程中业务信息的发送影响了心跳信息的按时发送。

随后通过复查A的源代码,印证了上述结论。A采用两个独立的线程分别负责发送业务信息和心跳信息,线程间共用一个UdpClient通信对象。虽然开发者在两个线程间设置了同步锁,但业务信息发送线程在完成发送任务后没有及时释放通信对象和同步锁,进而造成心跳发送线程等待时间过长,后续心跳发送超时。

问题的根源找到了,解决的方法也就显而易见了,就是在业务信息发送线程完成信息发送后迅速释放通信对象,解除同步锁。

至此,审案结束。Wireshark不是葫芦僧,更不是那“假语村言”。原告、被告心服口服。退堂!

Wireshark看似一把瑞士军刀,短小精悍,实乃网络分析的重武器。这里只是献个丑,让它牛刀小试。如果哪天真正在某个大事件里派上了用场,它的好处,你懂的!

时间: 2024-08-30 09:09:01

Wireshark明断葫芦案的相关文章

【谜客帝国】第139届微雨潇潇联想专场(2018.10.15)

[谜客帝国]第139届微雨潇潇联想专场(2018.10.15) 主持:瓷   计分:小白 1.本季重逢在帝国  只身东海挟春雷 乐天曲江之感怀 一段新愁染眉弯 5 今秋复来此 2.寒蛩轻唱送微凉  萧萧梧叶诉离情 白帝有语怜高洁 夜夜龙泉壁上鸣 4 此秋声也 3.人至中年心淡然  我言此季胜春潮 春愁夏恨冬烦忧 吟风作赋只伤春 4 不是悲秋 4.菊残犹有傲霜枝  立冬尚见黄叶飞 子夜歌里玉关情 竞雄洒血化碧涛 5 秋风吹不尽 5.轻寒最是可人天  貂裘换酒也堪豪 姑苏城外寒山寺 斋中结社咏海棠 

利用Wireshark 解密HTTPS流量

在我之前的一篇文章中已经介绍了一种解密HTTPS流量的一种方法,大致方法就是客户端手动信任中间人,然后中间人重新封包SSL流量. 文章地址: http://professor.blog.51cto.com/996189/1746183 -------------------------------------------------------------------------------------- 今天给大家介绍另外一种解密HTTPS流量的方法. Wireshark 的抓包原理是直接读取

使用Wireshark mac下抓取分析iphone数据包 --IOS端

mac系统版本:mac 10.10 Yosemite xcode版本:6.3.1 在追踪bug或者分析借鉴其他公司的app通讯思路时,抓包这件事是非常有必要的.下面说说Wireshark怎么截获iphone的数据包. 安装wireshark wireshark是依赖x11的,所以首先确认安装了x11,mac自带,可以打开升级一下.前往-实用工具-x11,打开后点击菜单栏上的x11,检查更新 即可.中间提取包内容过程比较长,耐心等待. 下载Wireshark最新版,尽量去官网下载:https://

macOS上,实现Wireshark手机抓包

1. 需要的硬件: Macbook Edimax EW-7822UAC无线网卡(如果买其他型号网卡,查看一下网卡的官网,确认有macOS的驱动) 需要的软件: Wireshark for macOS 2. 安装网卡驱动,重启动后,设置外置无线网卡EW-7822UAC连接到wifi网络. 3. 设置共享网络.注意,一定要把EW-7822UAC设置为"共享以下来源的连接",把内置网卡用于"用以下端口共享给电脑",如下图 点击上图的"Wi-Fi选项"按

(11)网页样式综合案列---灵活的电子相册 {上}

本篇学习资料讲解:       通过css对电子相册进行排版 和 侧面强调“盒子模型.标准流.浮动和定位”的重要性. 先来看看"双向联动模式"的电子相册图: {鼠标指针经过某张图片(或者某段文字)时,相应的文字(或者相应的某张图片)会以特殊样式显示} 以上部分的介绍将出现在(12)网页样式综合案列---灵活的电子相册 {下},这里只是提前感受. 1.搭建基本框架 搭建框架主要应考虑在实际页面中相册的具体结构和形式,包括照片整体排列的方法,用户可能的浏览情况,照片是否需要自动调整,等等.

Ubuntu按照wireshark后设置普通用户执行权限

1.添加wireshark用户组  sudo groupadd wireshark  2.将dumpcap更改为wireshark用户组  sudo chgrp wireshark /usr/bin/dumpcap  3.让wireshark用户组有root权限使用dumpcap  sudo chmod 4755 /usr/bin/dumpcap  (注意:如果设为4754 Wireshark还是会提示没有权限 )  4.将需要使用的普通用户名加入wireshark用户组,我的用户是"dengy

使用WireShark简单分析ICMP报文

ICMP协议介绍 1.ICMP是"Internet Control Message Protocol"(Internet控制消息协议)的缩写.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用. 2.ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去. 3.ICMP报文的种类有两种,即ICMP差错报告报

Wireshark网络分析实战笔记(一)抓包过滤器

抓包过滤器和显示过滤器的差别: 1.抓包过滤器配置在抓包之前,wireshark仅仅抓取抓包过滤器过滤的数据 2.显示过滤器配置在抓包后,wireshark已经抓取全部的数据包,显示过滤器让wireshark仅仅显示想看的数据包 抓包过滤器的配置方法: 1.在主页面的...using this filter中输入表达式(点击文本框前面的黄色button会显示经常使用的表达式): 2.打开capture interfaces选项,在capture filter for selected inter

WireShark之抓telnet密码

背景环境: 涉及到telnet和ssh知识的时候,必须要提的是telnet传输是明文的不安全的,传输的密码都会泄露,有兴趣来做个试验. 一:工具 ·①Windows 7 PC机:②GNS3:③Wireshark 二:试验步骤 ①windows 7 开启telnet 服务 IP:192.168.0.100/24 ②GNS3搭建好环境 Router配置好IP以及telnet连接的密码:123456 ③测试连通性 (PC机防火墙关闭) ④抓包 在GNS3中右键连接线,菜单选择Start WireSha