51学通信技术论坛

标题: wireshark是怎么判别不完整的协议包的 [打印本页]

作者: Harrison    时间: 2013-12-3 10:33:44     标题: wireshark是怎么判别不完整的协议包的

我昨天做了个实验,拷贝三段Diameter协议十六进制内容,第一段不完整,将内容通过TCP协议发送,通过wireshark能解析到第二段和第三段的内容,第一段被丢弃了,我想问的是wireshark怎么去判断第一段是破损的,又怎么去判断第二段的开头的呢?望高手赐教!
作者: wenliu    时间: 2013-12-3 12:30:28

能贴下你的pcap 截图么?


作者: Harrison    时间: 2013-12-3 13:50:06

wenliu 发表于 2013-12-3 12:30
能贴下你的pcap 截图么?

图可能不好看出来,我是想了解怎么从数据流里面截取数据,然后去掉前面无法判断协议类型的包,然后从完整的包开始去解析。
作者: 海浪    时间: 2013-12-4 10:14:27

从数据流查看数据比较麻烦,一般都是TLV的格式。 要分析协议,版本,长度,数值等,需要对协议个数据流格式非常清楚。一般wireshark就可以把数据流分析出来了,没有必要在去数据流16进制在找。建议把cap抓包文件放上来,让大家看看。
作者: Harrison    时间: 2013-12-4 10:57:11

本帖最后由 Harrison 于 2013-12-4 11:04 编辑
海浪 发表于 2013-12-4 10:14
从数据流查看数据比较麻烦,一般都是TLV的格式。 要分析协议,版本,长度,数值等,需要对协议个数据流格式 ...

因为我们的项目是在不特定的时间去某个端口获取海量数据进行协议解析并分析,然后存库,wireshark只能是辅助工具,检验我们所写的代码是否能实现该有的功能。如果是完整的Diameter协议数据,wireshark能解析出来,如果是缺失的,wireshark就把它当成Data了。通过TCP完整的发送一个Diameter协议数据:

[attach]3059[/attach]

下面是将一段不完整的和完整的数据一起通过TCP发送,wireshark不能识别Diameter,其实后面那段完整的也没解析出来:
[attach]3058[/attach]

又发现个问题:从端口去截取数据,不能确认包头的完整性,根本就不知道该用哪个协议头去解析,难道从ethernet到ip或TCP一个个的协议头去套?

作者: 爱卫生    时间: 2013-12-4 11:06:23

Harrison 发表于 2013-12-4 10:57
因为我们的项目是在不特定的时间去某个端口获取海量数据进行协议解析并分析,然后存库,wireshark只能是辅 ...

基本的解析过程是这样的。wireshark的解码其实就是根据各大规范对协议的定义来进行解码的。

解码先从物理层解起,例如读到0111110开头往后的字段,就可以判断出来是以太网的帧头,然后根据长度字段进行定界。另外根据以太网类型字段判断上层用户是谁(例如是IP),然后调用上层解码器进行解码。IP层也是一样的,通过长度定界。然后根据protocol type字段来决定上层用户是TCP还是UDP,等等。

如果有包被损坏导致长度发生变化从而分界失败,或者传输层使用了不规则的端口号,wireshark自然就解不出来了。


作者: wenliu    时间: 2013-12-4 13:09:05

你这边采用了TCP 做传输层,如果TCP 层因为丢包或者Seq No不对,那么TCP DATA 无法重组,也无法辨识是diameter。




欢迎光临 51学通信技术论坛 (http://www.51xuetongxin.com/bbs/) Powered by Discuz! X2