【VC++开源代码栏目提醒】:网学会员鉴于大家对VC++开源代码十分关注,论文会员在此为大家搜集整理了“【精品论文】Wireshark环境下的网络协议解析与验证方法 - 期刊论文”一文,供大家参考学习
770 2011 Vol.32 No.3 计算机工程与设计 Computer Engineering and Design 计算机工程与设计 Computer Engineering and Design Wireshark 环境下的网络协议解析与验证方法 罗青林 1, 徐克付 2, 臧文羽 2, 刘金刚 1 1. 首都师范大学
计算机科学联合研究院,北京 100048; 2. 中国科学院计算技术研究所 信息内容安全技术国家工程实验室,北京 100190摘 要:网络协议解 析通过程序分析 网络数据包的协 议头及其负载 ,是一系列网络功 能的基础。
分析了 Wireshark 的功能 、作 体用、 系结构以及开 发环境,给出了 Wireshark 在 Windows 系 统下对网络协议 解析的两种方法 ,总结了两种方 法的特性。
实验结果 表明,在两种方式 下添加的协议解 析器都能正确 解析网络数据包 相应协议并分析 数据包的负载 内容,对网络协议 的解析与 验证及网络数据 包的内容分析 具有借鉴意义。
关键 词:Wireshark 网络协议 协 议树 协议提 交 协议解析中图 法分类号: TP393 文献标 识码:A 文章编号:1000-7024 2011 03-0770-04 Network protocol parser and verification method based on Wireshark LUO Qing-lin1 XU Ke-fu2 ZANG Wen-yi2 LIU Jin-gang1 1. Join Faculty of Computer Scientific Research Capital Normal University Beijing 100048 China 2. National Engineering Laboratory for Information Security Technologies Institute of Computing Technology Chinese A
cademy of Sciences Beijing 100190 ChinaAbstract:The parsing of network protocol is the basis of a series function of the network which dependent on parsing the head and spayload of the packet. The Wireshar’ function architecture components and development environment are analyzed and the sourcecode is also studied. How to add network parsing protocol in two different ways in Windows is researched and the two methods withtheir own characteristics are summarized too. Finally the validity and efficiency of the above presented method is demonstrated by theexperiments. The reference is provided for network protocol parsing and verification as well as lay the foundation for follow-up designingand developing more complicated network application.Key
words:wireshark network protocol protocol tree protocol registration protocol parser
代码,并可以根据自身的需要对 Wireshark 进行定制或扩展。
0 引 言 本文介绍了 WireShark 的功能、作用、构成、开发环境等; 网络协议解析是指通过程序分析网络数据包的协议头及 研究了 WireShark 协议解析器的两种
设计方法及其流程、网络其负载,从而了解网络数据包在产生和传输过程中的行为。
数据包的内容检测方法,并给出了试验验证,为网络协议的解包含该解析程序的软件或设备通称为协议解析器。
网络协议 析与验证、数据包的内容检测提供了借鉴意义,并为后续设计解析有着广泛而深入的应用,如监视网络流量、分析数据包、 与开发更复杂的网络应用系统打下了基础。
监视网络资源利用、执行网络安全操作规则,鉴定分析网络数 1 WireShark 的系统结构据以及诊断并修复网络
问题等等,是一系列网络功能的基础。
由于网络协议种类繁多,而且各种新的协议层出不穷,因此需 WireShark 能够在网卡接口处捕捉数据包、并实时显示包要解析各种各样新的网络协议,同时解析器必须具有良好的 的详细协议信息;能够打开/保存捕捉的包、导入导出其它捕可扩展性, 以方便地为系统添加新的协议解析程序。
Wireshark 捉程序支持的包数据格式;能够在网卡处有选择性捕捉数据 前称 Ethereal 是一款免费
开源的协议解析器,是目前世界范 包、在捕捉到的包中也可以有选择性的显示不同条件的数据围内应用最广泛的网络协议解析
软件之一。
在 GNUGPL 通 包;还可以显示多种统计分析结果 比如 TCP、UDP 流、各个协用许可证的保障范围内,使用者可以
免费取得该软件及其源 议层统计信息等 ,同时扩展了大量的 EtherealWireshark 前身 收稿日期:2010-03-12;修订日期:2010-05-16。
基金项目:国家 973 重点基础研究发展计划基金项目 2007CB311100。
作者简介:罗青林 1985-,男,江西九江人,硕士研究生,研究方向为计算机网络、信息内容安全; 徐克付 1977-,男,湖北随州人,博士后,研究方向为信息内容安全、分布式系统; 臧文羽 1988-,女,湖南湘潭人,硕士研究生,研究方向为信息内容安全; 刘金刚 1962-,男,教授,研究员,博士生导师,研究方向为智能接口技术、操作系统。
E-mail:luoqinglinsoftware.ict.ac.cn罗青林,徐克付,臧文羽,等:Wireshark 环境下的网络协议解析与验证方法 2011 Vol.32 No.3 771所不支持的协议,支持在 UNIX 和 Windows 平台下进行开发。
步骤 3:下载并安装 python,保持默认即可。
其
系统结构 如图 1 所示。
1 步骤 4:下安装 Subersion Client。
假设以上几步都成功安装,并且从 Wireshark 源
代码池中 获取了最新源
代码,接下来就可以编译源文件。
步骤 5:修改 c:wiresharkconfig.nmake 中对应的编译器选 项、
程序安装路径等。
Wireshark 步骤 6:检查所需要的工具是否全部安装了,在 cmd.exe GTK 1/2 Protocol-Tree 而不是刚刚安装的 cygwin 的 bash 设置好了环境变量和路径 Dissectors 后键入: Core Epan nmake -f Makefile.nmake verify_tools Plugins Display-Filters 如果出现和图 2 一样的内容,说明编译所需要的工具全 部准确安装了。
Capture Wiretap Win-/libpcap Capture-Filters Harddisk Network 图1 Wireshark 的系统结构 Wireshark 系统结构的 6 个功能模块如下: GTK 1/2:图形窗口编程工具。
图2 检查工具安装的输出 Core:将其它模块连接起来,起到综合调度的作用。
Epan:Wireshark 对协议的具体解析,其中协议解析器的开 在 步骤 7: cmd.exe 键入 设置要环境变量和路径 nmake -f发包括内置 built-in 和插件 在 plugin 的方式,后面将详细介 Makefile.nmake setup,自动下载生成编译所需的库文件。
绍这两种方式的开发。
在 步骤 8: cmd.exe 键入 设置要环境变量和路径 nmake -f Win-/libpcap:底层抓包工具,提供了一整套的抓包函数库。
Makefile.nmake disclean,这一步同样非常重要,因为 Wireshark Capture:抓包引擎。
的源文件中包含一些在 Unix 编译的文件,因此需要把它删除, Wiretap:向磁盘读写包文件,包括 libpcap 和其它格式的 以免在 Windows 下编译 Wireshark 时存在一些文件冲突而造包文件。
成莫名其妙的错误。
到此 为 止 所有 准 备 工作 都 成功 结 束 了, 现在 可 以 编译2 开发环境介绍 Wireshark 了。
下面以 Windows 平台为例,详细说明 Wireshark 的工作原 在 步骤 9: cmd.exe 键入 设置要环境变量和路径 nmake -f理与具体实现机制。
首先介绍开发平台的搭建方法与过程, Makefile.nmake all 这个过程大概需要十几分钟左右,具体差距包括所需要的工具和详细步骤 2。
为了叙述方便,本文假设源 因机器的配置而不同。
代码存放 F:。
成功编译后,将会在 Wireshark 的根目录下面看到诸如 exe、2.1 所需要的工具 sln、vcproj 等文件,可以运行 Wireshark 抓取和解析数据包了。
Cygwin:一个在 Windows 平台上运行的 Unix 模拟环境。
3 Wireshark 解析协议的开发与应用 Compiler:本文采用 vs2008。
使 Python: cygwin 的包在 win32 下准确畅通地执行。
3.1 数 据 包 协 议 解 析工 作 原 理 Subversion: Wireshark 的源
代码池中获得最新源
代码。
从 先 应用层数据在经网络传输之前, 由上往下层层封装 把 NSIS: Wireshar 编译成可安装的 exe 文件。
而 的3-4, Wireshark 的解析正好相反,由下往上层层解封装的,2.2 详细步骤 Wireshark 以一棵协议树的形式对数据包分析,解析到某一层 步 骤 1:下 载 并 安 装 vs2008,包 括 用 于 设 置 环 境 变 量 的时 候由 某 一层 具体 的 解析 协议 来 解析 。
图 3 描 述了 一个vcvars32.bat。
http 数据包的详细解析过程,首先在以太网卡处获得数据帧, 步骤 2:下载并安装 cygwin,这一步要另外多选择几个包, 到 由 ARP/RARP 等解 析数据包的源/目 的 MAC 地址等, 了 IP分别是:Archive/unzip、Devel/bison、Devel/flex、Interpreters/perl、 层时由 IP 解析协议来解析 ,它将 详细解析 IP 报头的各个字Utils/patch、Web/wget、Archive/mt;因为这些包在 cygwin 默认安 里 段信息, 面的载荷 payload 数据则根据不 同的数据包类型装的时候并不包括。
交给不同的子解 析协议来出来 ,这里是 TCP 解析协议来处772 2011 Vol.32 No.3 计算机工程与设计 Computer Engineering and Design 环境下所有的协议解析器都是通过这 3 个过程来实现,比如 frame ip tcp http data frame 网络传输过程使用频率较高的 tcp、udp、 http 等内置型协议。
ftp、 1 协议注册 ip tcp http data ip 通过调用 proto_register_protocol 协议注册函数向主程序 tcp http data 注册一个协议名 如 tcp 的解析器,返回的 proto_tcp 相当于主 tcp udp 程序管理协议解析器的一个句柄。
在这个协议注册里面同时 http data http … 包含两个重要的函数,即调用 proto_register_field_array 协议字 amin 段
注册函数把协议字段信息注册到该协议下面, proto_register_ 图3 数据包的协议解析过程 subtree_array 函数将相应项的和值添加到协议树下面。
proto_tcp proto_register_protocol理,TCP 再 将它里面封装 的载荷类型交给 HTTP 解析协议 模 quotTrans
mission Control Protocolquot / name /块来处理。
quotTCPquot / short name /3.2 解析协议的开发 quottcpquot / abbrev / Wireshark 的协议解析开发有两种方式:内置型和插件型。
2 协议提交插件类型开发相对容易编写,因为它不需要知道系统的整个 proto_reg_handoff_tcpvoid框架结构以及整个程序的详细流程;而只需要根据接口的相 tcp_handle create_dissector_handledissect_tcp proto_tcp关说明直接调用就可以了。
因此本文先从插件型协议解析开 dissector_addquotip.protoquot IP_PROTO_TCP tcp_handle发开始介绍。
3.2.1 插 件 型 plugin 通过将注册的协议向主程序提交,使得协议解析函数和 Wireshark 提供了一种通用的接口通过插件 的方式开发 5 主函数关联起来,告诉系统当 ip 数据包报头协议选项为 tcp 协解析协议,即在源
代码的指定目录下 …wiresharkwireshark- 议时,就要调用 dissect_tcp 这个解析模块来处理。
即 tcp 协议gtk2plugins 增加编译好的库文件 比如 amin.dll。
解析器是在 IP 协议分支下注册的一个节点。
为了编译解析器并创建插件,需要在解析器
代码文件所 3 协议解析在的目录下创建一些提供支持的文件,分别是: 这个函数里面就是一个协议解析器具体要做的事情,比 · Makefile.am:UNIX/Linux 的 makefile 模板 如对报头怎么解析,对载荷数据如何解析,是当前处理,还是 · Makefile.common:包含了插件文件的名称 交给相应的子节点来处理?各个协议解析器的复杂程度也就 · Makefile.nmake:包含了在 Windows 平台下 Wireshark 插 取决于这部分的具体解析5
工作,详细解析工作可以分析 Wire-件的 makefile shark 源文件里各个解析器的协议解析函数的源
代码,同时可 · moduleinfo.h:包含了插件版本信息 以将许多定制扩展功能 6 从这个解析函数里加进来。
比如 tcp · moduleinfo.nmake:包含了针对 Windows 平台动态链接 协议解析函数 dissect_tcp ,它首先会将报头的各个字段信息库 DLL 版本信息 详细给解析出来,然后对于 payload 载荷数据,如果存在有效 · amin.c:要开发的解析器的源
代码文件 载荷数据就交给 dissect_tcp_payload 函数去处理,或者自己处 · plugin.rc.in:包含了针对 Windows 平台的 DLL 资源模板 理,或者交给注册在该协议下的相应解析协议去处理。
上述支持文件具体编写,可以参照 Wireshark 源文件在 3.4 数 据 包 负 载 内 容检 测plugin 提供的一些经典实例 比如 profinet 文件 。
在数据包通过协议树解析过程中,不仅可以对包头进行3.2.2 内 置 型 built-in 解析, 还 实现基 于报头特征的快 速包分类, 可以对包负载内 内置型的协议解析开发对比比较插件方式而言:需要了 容通过串匹配算法来进行检测,从而对一些符合相关特性的解 Wireshark 的组织架构,哪些协议解析本身就是以内置型的 数据包进行特殊 处理。
比如可以 将 snort 规 则集建成自动机 ,方式开发的,源文件放在什么位置,是如何被编译和运行的等。
然后将所有的数据包内容在这个自动机上进行扫描,将匹配 由于内置型 7 的协.