Wireshark 学习笔记 1. 简介 2. Wireshark 功能模块 下图给出了wireshark 功能模块: a) GTK1/2 处理用户的输入输出显示,源码在gtk 目录. b) Core 核心模块,通过函数调用将其他模块连接在一起,源码在根目录 c) Epan wireshark Packetage Analyzing,包分析引擎,源码在epan 目录 Protocol-Tree:保存数据包的协议信息,wireshark 的协议结构采用树形结构,解析协议报文时只需要从根节点通过函数句柄依次调用各层解析函数即可。 Dissectors:在epan/dissector 目录下,各种协议解码器,支持 700+种协议解析,对于每种协议,解码器都能识别出协议字段(field),并显示出字段值(field value)由于网络协议种类很多,为了使协议和协议间层次关系明显,对数据流里的各个层次的协议能够逐层处理,wireshark 系统采用了协议树的方式。 Plugins:一些协议解码器以插件形式实现,源码在plugins 目录 Display-Filters:显示过滤引擎,源码在epan/dfilter 目录 d) Captu re 捕包引擎,利用libpcap/WinPcap 从底层抓取网络数据包,libpcap/WinPcap 提供了通用的抓包接口,能从不同类型的网络接口(包括以太网,令牌环网,ATM 网等)获取数据包。 e) Wiretap 从文件中读取数据包,支持多种文件格式,源码在wiretap 目录 f) Win-/libpcap Wireshark 抓包时依赖的库文件 w ireshark 功能模块 3. w ireshark 流程分析 1 ) 初始化 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 注册 将协议与父协议节点关联起来 ...