- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
wireshark代码解析1
Wireshark学习笔记
简介
Wireshark功能模块
下图给出了wireshark功能模块:
GTK1/2
处理用户的输入输出显示,源码在gtk目录.
Core
核心模块,通过函数调用将其他模块连接在一起,源码在根目录
Epan
wireshark Packetage Analyzing,包分析引擎,源码在epan目录
Protocol-Tree:保存数据包的协议信息,wireshark的协议结构采用树形结构,解析协议报文时只需要从根节点通过函数句柄依次调用各层解析函数即可。
Dissectors:在epan/dissector目录下,各种协议解码器,支持700+种协议解析,对于每种协议,解码器都能识别出协议字段(field),并显示出字段值(field value)由于网络协议种类很多,为了使协议和协议间层次关系明显,对数据流里的各个层次的协议能够逐层处理,wireshark系统采用了协议树的方式。
Plugins:一些协议解码器以插件形式实现,源码在plugins目录
Display-Filters:显示过滤引擎,源码在epan/dfilter目录
Capture
捕包引擎,利用libpcap/WinPcap从底层抓取网络数据包,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网,令牌环网,ATM网等)获取数据包。
Wiretap
从文件中读取数据包,支持多种文件格式,源码在wiretap目录
Win-/libpcap
Wireshark抓包时依赖的库文件
wireshark功能模块
wireshark流程分析
初始化
Wireshark的初始化包括一些全局变量的初始化、协议分析引擎的初始化和Gtk相关初始化,显示Ethereal主窗口,等待用户进一步操作。重点就是Epan模块的初始化。
Epan初始化:
tvbuff初始化:全局变量tvbuff_mem_chunk指向用memchunk分配的固定大小的空闲内存块,每个内存块是tvbuff_t结构,从空闲内存块中取出后,用来保存原始数据包。
协议初始化:
全局变量:
proto_names
proto_short_names
proto_filter_names
以上三个全局变量主要用来判断新注册的协议名是否重复,如果重复,给出提示信息,在协议解析过程中并没有使用。
协议注册:
注册协议:将三个参数分别注册给proto_names、proto_short_names、proto_filter_names三个全局变量中,
注册字段,需要在wireshark协议树显示的报文内容字段。
协议解析表
Handoff注册
将协议与父协议节点关联起来
Packet(包)初始化
全局变量:
frame_handle:协议解析从frame开始,层层解析,直到所有的协议都解析完为止。frame_handle保存了frame协议的handle。
data_handle:有的协议无法从frame开始,那么就从data开始。原理同frame。
读配置文件preference
读capture filter和display filter文件,分别保存在全局变量capture_filter和display_filter中。
读disabled protocols文件,保存全局变量global_disabled_protos和disabled_protos中
初始化全局变量cfile
Cfile是个重要的变量,数据类型为capture file,它保存了数据包的所有信息,
取得命令行启动时,参数列表,并进行相应的处理
处理流程
Wireshark初始化完成以后进入实际处理阶段,主程序创建抓包进程,捕包进程和主程序是通过PIPE进行传递数据的,主程序把抓取的数据写入临时文件,通过函数add_packet_to_packet_list将数据包加入包列表。处理时,主程序从列表中选取一个数据包,提取该数据包中的数据填写在数据结构中,最后调用协议解析函数epan_dissect_run进行处理,从epan_dissect_run开始,是实际的协议解析过程,
下面以HTTP协议报文为例,流程如下:
解析frame层
调用函数dissect_frame对frame层进行解析,并在协议树上填充相应字段信息。函数最后会判断是否有上层协议封装,如果有则调用函数dissector_try_port在协议树上查找对应的解析函数,这里函数dissector_try_port根据pinfo-fd-lnk_t查找对应的上层协议处理函数,pinfo-fd-lnk_t值为1,上层封装协议为以太网协议,全局结构体指针变量dissector_handle当前的协议解析引擎句柄置为dis
文档评论(0)