Wireshark明断葫芦案

2024-03-01 08:10
文章标签 wireshark 葫芦 明断

本文主要是介绍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看似一把瑞士军刀,短小精悍,实乃网络分析的重武器。这里只是献个丑,让它牛刀小试。如果哪天真正在某个大事件里派上了用场,它的好处,你懂的!

 

转载于:https://www.cnblogs.com/cuteblueone/p/4288148.html

这篇关于Wireshark明断葫芦案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761756

相关文章

wireshark安装及抓包新手使用教程

Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括:   1、Wireshark软件下载和安装以及Wireshark主界面介绍。   2、WireShark简单抓包示例。通过该例子学会怎么抓包以及如何简单查看分析数据包内容。   3、Wireshark过滤器使用。过滤器包含两种类型,一种是抓包过滤器,

802.11报文类型在wireshark的过滤条件

– Common Filters for wireshark sniffer: #地址过滤 wlan.addr == wlan.sa eq 00:09:5b:e8:c4:03 and wlan.bssid ne ff:ff:ff:ff:ff:ff wlan.bssid eq 00:11:92:6e:cf:00 wlan.sa eq 00:09:5b:e8:c4:03 #802.11报文类型过滤

wireshark使用攻略

简介 wireshark 是网络封包分析工具,可与截取各种网络数据包并且显示数据包的详细信息。 使用 打开wireshark :  在Linux中使用sudo  wireshark 打开 打开之后选择对应的网卡,就可以进行网络信息的捕获,开始抓取网络包。 可以使用浏览器打开百度或者其他网页,之后就可以获得数据包。 在上面的标签框中可以选择筛选条件只显示有关的数据包。eg: 标识处为三

[wireshark] The NPF driver isn't running 解决办法( wireshark NPF拒绝访问问题)

wireshark安装后,由于NPF服务没有打开,导致无法抓包,            注:NPF即网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。

那些年你用过的工具--网络工具Wireshark经验谈

自从网络出现以来,网络故障就没有停止过。如何快速、准确地定位网络故障和维持网络的稳定运行一直是人们追求的目标。为了分析网络故障的原因,专业的网络 分析软件便产生了。网络分析软件充当了网络程序错误的检修工具, 开发人员使用它发现协议开发中的 BUG,很多人使用它监听网络数据,同时也可以作为检查安全类软件的辅助工具。  网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资

Wireshark 认识捕获的分析数据包(及各个分层协议的介绍)

综述:认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了,学会捕获数据了,接下来就该去认识这些捕获的数据包了。Wireshark将从网络中捕获到的二进制数据按照不同的协议包结构规范,显示在Packet Details面板中。为了帮助用户能够清楚的分析数据,本节将介绍识别数据包的方法。 在Wireshark中关于数据包的叫法有三个术语,分别是帧、包、段。下面通过分

wireshark 捕捉过滤器和显示过滤器的区别 及各自的用法

同:捕捉过滤器和显示过滤器同样面临首要的问题是选择,选择捕捉或显示那些数据。 异: 捕捉过滤器 (此过滤器不需要比较运算符,查询关键字请全部小写) 捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。 捕捉过滤器的语法与其它使用Lipcap(Linux)或者Winpcap(Windows)库开发的软件一样,比如著名的TCPdump。捕捉过滤器必须在开始捕捉前设置

wireshark 基本用法及过虑规则参考

Wireshark 基本语法,基本使用方法,及包过虑规则: 1.过滤IP,如来源IP或者目标IP等于某个IP 例子: ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107 或者 ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP linux上运行的wireshark图形窗

wireshark之tcptrace

wireshark的tcptrace图非常强大, 也有些复杂。 本文简单记录下每条线的意义, 方便以后查找。  参考http://packetbomb.com/understanding-the-tcptrace-time-sequence-graph-in-wireshark/  第一个图是bbr没有丢包,没有乱序的简单图。 最上面绿色图是发送的一个上限,即对端的接收窗口+当前的发送序列号,

如何用wireshark分析找出url接口和param参数???

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述   如何用wireshark分析找出url接口和param参数。我之前用fiddler抓取微信小程序的包,一直很顺利,但这次有一个小程序的包