- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Wireshak网络协议解析原理与新协议添加方法
Wireshark网络协议解析原理与新协议添加方法
摘要:为了快速对自定义网络协议进行协议解析,对wireshark网络协议解析原理与添加方法进行了深入的分析。在此基础上,对wireshark添加自定义网络协议的解析器。由于有效地利用了wireshark已有框架,该方式相对传统自行开发协议分析工具具有工作量少、功能强大与兼容性好的优点。
关键词:协议解析;wireshark; 网络分析
0引言
网络协议分析器(network analyzer)是对通用协议的数据包进行解码,并以人可读的格式显示网络流量内容的软件或设备。由于网络协议种类繁多,各种新协议层出不穷,因此分析器必须具有良好的可扩展性,可方便地支持新的协议。
wireshark是一款免费开源的协议分析器,是目前应用最广泛的网络协议分析软件之一。本文介绍了wireshark网络协议解析的原理与新协议添加的方法,并分析了向wireshark中添加新协议解析器的两种方法,并对自定义的网络协议给出添加步骤。
1wireshark系统结构
wireshark的系统结构如图1所示,主要功能模块如下:①gtk 1/2:图形窗口工具,操控所有的用户输入/输出界面;②core:将其它模块连接起来,起到综合调度的作用;③epan:wireshark协议解析器;④capture:数据包捕获引擎,依赖于底层库winpcap/libpcap库;⑤wiretap:从磁盘读写数据包文件的引擎。
2数据包协议解析原理
2.1协议树
基于osi的7层协议模型,协议数据是从上到下封装后发送的,而对于协议解析需要从下至上进行。首先对网络层的协议识别后进行组包还原,然后脱去网络层协议头,将里面的数据交给传输层分析,这样一直进行下去,直到应用层。
由于网络协议种类很多,就wireshark所识别的500多种协议来说,为使协议和协议间层次关系明晰,从而对数据流中各层次的协议能够逐层处理,wireshark系统采用了协议树的方式,如图2中所示。图2中udp协议的所有数据都是封装在ip协议中的,那么udp协议就是ip协议的一个协议子节点,具有相同父节点的协议成为兄弟节点,如tcp与udp节点。
图1wireshark的系统结构图图2一个简单的协议树
wireshark采用协议的特征字来识别拥有同样父协议的兄弟节点协议。每个协议注册自己的特征字,这些特征字给子节点协议提供可以互相区分开来的标识。在wireshark中注册一个协议解析器首先需要指出它的父协议是什么,另外还需指出自己区别于父节点下所有兄弟节点协议的特征字。
由于采用了协议树加特征字的设计,wireshark在协议解析上具备了很强的扩展性,增加一个协议只需要将该协议相关的解析函数挂到协议树上相应的节点即可。
2.2添加协议解析器的方式
向wireshark添加新协议解析器有两种方式:内置型(builtin)和插件型(plugin)。
2.2.1插件型(plugin)
插件型是构建一个插件(如一个动态连接库),并把它自己注册到主程序中,执行解析工作。
插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信。并且,在宿主程序不变的情况下,可通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。
由于现在网络协议种类繁多,为了可以随时增加新的协议解析器,wireshark也采用了插件技术。如果需要对一个新的协议进行解析,只需要开发这个协议解析器,并调用注册函数向主程序注册就可以了。
2.2.2内置型(builtin)
内置型是把一个协议解析器编译进主程序中,它将一直可用。
内置型与组件型的差异很小,只不过内置型的重构周期比组件型的长很多,同时没有插件型那么灵活。
3数据包解析器代码结构
新增加一个协议解析器的步骤一般分为注册协议,初始化解析器,实际解析处理3个步骤,下面以自定义协议演示如何增加一个协议解析器。插件型与内置型两种方式的代码结构基本相同,此处不做区别。自定义协议(foo protocol)格式如表1所示。
表1自定义协议格式
数据包类型标识序号ip地址该协议为udp协议的子协议,端口为1234,其中:
数据包类型—— 一个字节,可能取值:1—初始化,2—终止,3—数据。
标识—— 一个字节, 可能取值:0x01—开始数据包, 0x02—结束数据包, 0x04—优先数据包。
序号—— 两个字节。
ip地址—— 四个字节。
3.1注册协议
主要调用proto_register_protocol函数来注册协议。
#define foo_port 1234
static int proto_foo = -1;
static gint ett_foo = -1;
文档评论(0)