wireshark插件开发完整解决方案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
括了所有 wireshark 不同版本的源代码。我的是在 1.4.4 版本上编译通过的,所以建议用这个 版本。
5 下载编译要用的 Lib 库 从 http://anonsvn.wireshark.org/wireshark-win32-libs/trunk/packages/ 上 下 载 在
Win32 上编译所需要的 Lib 库. 注意:把下载后的 zip 文件原样放在 C:\wireshark-win32-libs 目录下即可,不要解压。
8. 运行编译后的程序 打开 C:\wireshark\wireshark-gtk2 目录, 运行其中的 wireshark.exe. 如果看到熟悉的界
面,那么祝贺你编译成功!打开 Help 菜单,查看 wireshark 选项卡, 看看在版本号那里显示的 是不是你自己定义的版本?如"Version 0.99.7-myversion". 下面还显示了编译时的库和其他一 些信息.
wireshark 开发环境搭建一些参考资料: http://blog.csdn.net/hcj2002/article/details/2255637#cpp (Wireshark 编译环境设置和编译) http://blog.csdn.net/stk_tianwen/article/details/5306912 (windows 下 wiershark 插件开发之源码编译[主要是环境搭建过程中可能会遇到的问题]) http://www.wireshark.org/docs/wsdg_html_chunked/ (wireshark 开发人员文档) http://www.codeproject.com/KB/IP/custom_dissector.aspx (整个解决方案:codeproject 社区)
1.解析器的本质工作
作为一个协议解析器,其要完成的工作是将数据包中,解析器所针对的协议部分的各个 字段的信息,进行详细地呈现。观察 wireshark 的界面程序,在显示一个数据包的详细内容 的窗口中,是以一个树形的结构来将数据包划分成各层协议,并展示各部分的含义。同时, 在数据包列表主窗口中,还显示的有各个数据包的概览信息,并可以通过相关的过滤规则进 行筛选显示。所以,解析器的核心工作就在于数据包详细内容窗口部分的树形结构的维护, 并结合过滤器、数据包列表等部分,进行筛选与信息的呈现。
在 Wireshark 中 有 一 个 脚 本 专 门 来 发 现 开 发 者 定 义 的 类 似 proto_reg_handoff_xxx 和 proto_register_xxx 这样的注册函数名,然后自动生成调用这些注册函数的代码。
wireshark 启动时会加载所有$installdir/plugins/$buildversion/*.dll,并且调用每个 dll 导出 的这两个函数。插件在这两个函数里完成 dissector 的注册和初始化工作,其中 plugin_register 注册插件,plugin_reg_handoff 注册协议。
3.2 建立源码文件
新建自己的协议解析文件,可以将每个解析器放在各自的单独的.c 文件中,每个.c 文件 中最好包含前文提到的三大部分,推荐为 packet-XXX.c
3.3 注册相关参量
注册协议的函数模板为:
void proto_register_xxx(void);
且必须以 proto_register_XXX 命名,XXX 含义为前面提到的协议名。函数无需返回值, 也无需参数。在此函数中,一个简单的解析器,仅仅需要一句函数调用即可。
打开 DOS 窗口,把 vcvars32.bat 里面的命令粘贴到 DOS 中去,按 ENTER 键。然后进入 wireshark 目录,首先通过下面的命令行验证一下: nmake -f Makefile.nmake verify_tools 如果没有错误的话,会出现图 A 所示;如果有错误,那么可能是你变量设置不正确或安装文 件的版本不符合要求,只能根据相应的错误来修改。这边我折腾了很久,经历过一些变量设 置错误和用 VS2005 搭建失败,经过自己的修改,最终环境搭建成功了!
拷贝到 C 盘根目录下,在接下去的步骤中会用到这个。(我用 vs2005 编译没有通过,建议用 2008)
我的 bat 文件地址为:C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools
2 安装 Python
下载并安装用于 Win32 的 Python2.4.3 版本.注意:请安装到默认的 C:\Python24 目录 3 安装 Cygwin
如果没有安装 HTML Help Workshop(chm 帮助文件制作工具), 注释掉此行. (9)INSTALL1_DIR
如果不想生成 GTK1 程序, 用#注释掉此行 (10)HHC_EXE
如果没有安装 HTML Help Workshop(chm 帮助文件制作工具), 注释掉此行 7. 编译 wireshark
Cygwin 是一个在 Windows 平台下运行的 unix 模拟环境,安装 Cygwin2.510.2.2 安装包并 下载,注意此 ISO 文件有 660 多 M,下载完成后,用虚拟光驱载入镜像,运行 setup.exe,并 选择安装以下几个编译 wireshark 所必需,但默认又不安装的包(分类/具体的包):
Wireshark 插件开发整体解决方案
前段时间自己开发了一个 wireshark 的插件,网上介绍插件开发的资料实在是少得可怜, 现在整个项目结束了,自己决定写一个文档,介绍下自己整个项目的开发过程。这个文档我 是整合了很多网上的资料以及自己开发过程中的一些经验编写而成,如果有什么问题,可以 邮件交流:ake0104@163.com
在我的项目中,我在 Windows 的开始中会生成一个类似 DOS 窗口的东西,名叫 Visual Studio 2008 command Prompt。之后我就是在这里手动编译自己的插件解析代码并且最终生 成 DLL 解析文件的。到这里我们的环境搭建成功了,整个项目也差不多完成了 1/4,接下来 就是要编写我们的解析代码了!
a. Archive/unzip b. Devel/bison c. Devel/flex
d. Interpreters/perl e. Utils/patch f. Web/wget
选择方法:展开后点击 skip,使其变为版本号即可。注意:安装到默认的 C:\cygwin 目录.
4 下载 wireshark 源代码 从这个网址 http://www.Wireshark.org/download/src/all-versions/上下载,该网址包
将其修改为本机 python.exe 和其安装目录的位置,例如:C:\Python24\Python.exe (6)MSVCR_DLL
如果 VS 不是安装在 C 盘,请在这里相应的地方用绝对路径表示,而不要去修改前面的 PROGRAM_FILES。 (7)MAKENSIS
如果你没有安装 NSIS 安装程序制作工具, 用#注释掉此行. (8)HHC_DIR
FT_BOOLEAN, BASE_DEC, NULL,XXX_START_FLAG, NULL, HFILL } }, { &hf_xxx_endflag, { "XXX PDU End Flags", "xxx.flags.end", FT_BOOLEAN, 8, NULL, XXX_END_FLAG, NULL, HFILL } }, { &hf_xxx_priorityflag, { "XXX PDU Priority Flags", "xxx.flags.priority", FT_BOOLEAN, 8, NULL,XXX_PRIORITY_FLAG, NULL, HFILL } }, }; 此示例中就定义了三个结构,用以代表三个协议字段。 拿第一个数组单位为例: 1.赋值列表中,&hf_xxx_startflag 代表取得 hf_xxx_startflag 的地址,hf_xxx_startflag 初值 必须为-1,后续在对此数组进行注册的时候,会对 hf_xxx_startflag 进行赋值,保存此结 构单位的标识。 2.字符串 “XXX PDU Start Flags” ,作为参数传递给此结构,代表在详细信息窗口中, 此结构对应的协议字段的名称信息。显示位置如下图框选部分所示(不包括冒号):
我 使 用 的 是 VS2008, 所 以 在 这 里 把 值 为 MSVC2008 的 那 一 行 前 面 的 # 去 掉 , 其 余 MSVC_VARIANT 项保持不变。 (4)CYGWIN_PATH
将其设置为 Cygwin 的 bin 目录,例如 C:\Cygwin\bin. (5)PYTHON 及其后的 PATH
6. 编辑 config.nmake 文件 下载完成之后,在 wireshark 目录里面打开 config.nmake 文件,需要进行一些设置之后才
可以开始编译。 (1)WIRESHARK_LIBS:
设置编译 wireshark 所需要的库所在的目录。 (2)PROGRAM_FILES:
设置本机程序安装目录,默认即可。 (3)MSVC_VARIANT
2. 插件代码的编写
wireshark 由于采用插件技术,一个程序员开发一种新的协议分析模块的时候不需要了解 所有的代码,仅知道要生成的插件 dll 需要提供两个对外的接口就可以了。它们分别 是 proto_register 接口,作用是注册解析器的协议信息,另外一个是 proto_reg_handoff 接口,作 用是用来注册解析器的解析句柄。
2.解析器插件的核心
协议解析器的核心逻辑流程包括以下部分: 1、 注册协议:注册协议的名称,过滤字符串,及其它相关所需的结构。 2、 提供协议解析函数:关键部分,此函数由 wireshark 核心调用,处理协议的解析及
显示工作。
3.流程 3.1 创建目录
由于是插件方式,新建的目录需要在 wireshark 的 plugins 目录下,以需要解析的协议名 称命名,如 XXX。为避免麻烦,推荐所有自己可命名的协议名,都统一为一个。
1. 开发环境的搭建
我自己项目搭建环境时用到的软件包: 1. Visual Studio 2008 2. Python 2.4.3 3. Cygwin 2.510.2.2 4. Wireshark1.4.4 源代码 5. 编译时要用到的 Lib 库
1 安装 VS2008 安装好了 VS2008 之后,打开你的安装目录\Common7\Tools,将其中的 vsvars32.bat 文件
3.3.1 hf_register_info
其数据结构定义可参考相关头文件。 此结构是一个ቤተ መጻሕፍቲ ባይዱ于代表协议中用于解析各个字段信息的结构。使用的时候,通常使用数 组方式来代表协议中的诸多字段,如: static hf_register_info hf[] = {
{ &hf_xxx_startflag, { "XXX PDU Start Flags", "xxx.flags.start",
proto_XXX=proto_register_protocol(“Protocol full name”, “Protocol short name”, “protocol filter name”);
其中: proto_XXX:协议全局标识,用于后续相关的注册与解析工作。 声明语句如下: static int proto_XXX = -1; 声明时,必须赋值为-1,proto_register_protocol 函数会为其赋值为注册结果标识,供后 面使用。 函数参数为三个字符串:协议全名(用于详细信息部分显示 ),协议简称(用于相关界 面上的简单表示与描述)和协议过滤字符串(用于在过滤器处输入过滤规则时的匹配字符 串)。其中,过滤字符串必须小写。 最简单的协议注册,只需上面的 proto_register_protocol 函数调用即可,后续注册在 proto_register_XXX 中不是必须,起辅助作用。 注册参量部分除了注册协议名称外,还可以根据需要注册其他相关的数据结构。最常用 的,主要为以下几个数据结构:
图A
然后下载编译过程中所需要的库文件: nmake -f Makefile.nmake setup 这时,会在 wireshark_libs 目录下下载一些库文件并解压完成。最后执行以下命令就可以开 始编译了,整个编译过程需要点时间,如果系统没有出现什么提示错误,请不要关闭。 nmake -f Makefile.nmake distclean 来清除源代码中用于在其它平台下编译的文件 nmake -f Makefile.nmake all
5 下载编译要用的 Lib 库 从 http://anonsvn.wireshark.org/wireshark-win32-libs/trunk/packages/ 上 下 载 在
Win32 上编译所需要的 Lib 库. 注意:把下载后的 zip 文件原样放在 C:\wireshark-win32-libs 目录下即可,不要解压。
8. 运行编译后的程序 打开 C:\wireshark\wireshark-gtk2 目录, 运行其中的 wireshark.exe. 如果看到熟悉的界
面,那么祝贺你编译成功!打开 Help 菜单,查看 wireshark 选项卡, 看看在版本号那里显示的 是不是你自己定义的版本?如"Version 0.99.7-myversion". 下面还显示了编译时的库和其他一 些信息.
wireshark 开发环境搭建一些参考资料: http://blog.csdn.net/hcj2002/article/details/2255637#cpp (Wireshark 编译环境设置和编译) http://blog.csdn.net/stk_tianwen/article/details/5306912 (windows 下 wiershark 插件开发之源码编译[主要是环境搭建过程中可能会遇到的问题]) http://www.wireshark.org/docs/wsdg_html_chunked/ (wireshark 开发人员文档) http://www.codeproject.com/KB/IP/custom_dissector.aspx (整个解决方案:codeproject 社区)
1.解析器的本质工作
作为一个协议解析器,其要完成的工作是将数据包中,解析器所针对的协议部分的各个 字段的信息,进行详细地呈现。观察 wireshark 的界面程序,在显示一个数据包的详细内容 的窗口中,是以一个树形的结构来将数据包划分成各层协议,并展示各部分的含义。同时, 在数据包列表主窗口中,还显示的有各个数据包的概览信息,并可以通过相关的过滤规则进 行筛选显示。所以,解析器的核心工作就在于数据包详细内容窗口部分的树形结构的维护, 并结合过滤器、数据包列表等部分,进行筛选与信息的呈现。
在 Wireshark 中 有 一 个 脚 本 专 门 来 发 现 开 发 者 定 义 的 类 似 proto_reg_handoff_xxx 和 proto_register_xxx 这样的注册函数名,然后自动生成调用这些注册函数的代码。
wireshark 启动时会加载所有$installdir/plugins/$buildversion/*.dll,并且调用每个 dll 导出 的这两个函数。插件在这两个函数里完成 dissector 的注册和初始化工作,其中 plugin_register 注册插件,plugin_reg_handoff 注册协议。
3.2 建立源码文件
新建自己的协议解析文件,可以将每个解析器放在各自的单独的.c 文件中,每个.c 文件 中最好包含前文提到的三大部分,推荐为 packet-XXX.c
3.3 注册相关参量
注册协议的函数模板为:
void proto_register_xxx(void);
且必须以 proto_register_XXX 命名,XXX 含义为前面提到的协议名。函数无需返回值, 也无需参数。在此函数中,一个简单的解析器,仅仅需要一句函数调用即可。
打开 DOS 窗口,把 vcvars32.bat 里面的命令粘贴到 DOS 中去,按 ENTER 键。然后进入 wireshark 目录,首先通过下面的命令行验证一下: nmake -f Makefile.nmake verify_tools 如果没有错误的话,会出现图 A 所示;如果有错误,那么可能是你变量设置不正确或安装文 件的版本不符合要求,只能根据相应的错误来修改。这边我折腾了很久,经历过一些变量设 置错误和用 VS2005 搭建失败,经过自己的修改,最终环境搭建成功了!
拷贝到 C 盘根目录下,在接下去的步骤中会用到这个。(我用 vs2005 编译没有通过,建议用 2008)
我的 bat 文件地址为:C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools
2 安装 Python
下载并安装用于 Win32 的 Python2.4.3 版本.注意:请安装到默认的 C:\Python24 目录 3 安装 Cygwin
如果没有安装 HTML Help Workshop(chm 帮助文件制作工具), 注释掉此行. (9)INSTALL1_DIR
如果不想生成 GTK1 程序, 用#注释掉此行 (10)HHC_EXE
如果没有安装 HTML Help Workshop(chm 帮助文件制作工具), 注释掉此行 7. 编译 wireshark
Cygwin 是一个在 Windows 平台下运行的 unix 模拟环境,安装 Cygwin2.510.2.2 安装包并 下载,注意此 ISO 文件有 660 多 M,下载完成后,用虚拟光驱载入镜像,运行 setup.exe,并 选择安装以下几个编译 wireshark 所必需,但默认又不安装的包(分类/具体的包):
Wireshark 插件开发整体解决方案
前段时间自己开发了一个 wireshark 的插件,网上介绍插件开发的资料实在是少得可怜, 现在整个项目结束了,自己决定写一个文档,介绍下自己整个项目的开发过程。这个文档我 是整合了很多网上的资料以及自己开发过程中的一些经验编写而成,如果有什么问题,可以 邮件交流:ake0104@163.com
在我的项目中,我在 Windows 的开始中会生成一个类似 DOS 窗口的东西,名叫 Visual Studio 2008 command Prompt。之后我就是在这里手动编译自己的插件解析代码并且最终生 成 DLL 解析文件的。到这里我们的环境搭建成功了,整个项目也差不多完成了 1/4,接下来 就是要编写我们的解析代码了!
a. Archive/unzip b. Devel/bison c. Devel/flex
d. Interpreters/perl e. Utils/patch f. Web/wget
选择方法:展开后点击 skip,使其变为版本号即可。注意:安装到默认的 C:\cygwin 目录.
4 下载 wireshark 源代码 从这个网址 http://www.Wireshark.org/download/src/all-versions/上下载,该网址包
将其修改为本机 python.exe 和其安装目录的位置,例如:C:\Python24\Python.exe (6)MSVCR_DLL
如果 VS 不是安装在 C 盘,请在这里相应的地方用绝对路径表示,而不要去修改前面的 PROGRAM_FILES。 (7)MAKENSIS
如果你没有安装 NSIS 安装程序制作工具, 用#注释掉此行. (8)HHC_DIR
FT_BOOLEAN, BASE_DEC, NULL,XXX_START_FLAG, NULL, HFILL } }, { &hf_xxx_endflag, { "XXX PDU End Flags", "xxx.flags.end", FT_BOOLEAN, 8, NULL, XXX_END_FLAG, NULL, HFILL } }, { &hf_xxx_priorityflag, { "XXX PDU Priority Flags", "xxx.flags.priority", FT_BOOLEAN, 8, NULL,XXX_PRIORITY_FLAG, NULL, HFILL } }, }; 此示例中就定义了三个结构,用以代表三个协议字段。 拿第一个数组单位为例: 1.赋值列表中,&hf_xxx_startflag 代表取得 hf_xxx_startflag 的地址,hf_xxx_startflag 初值 必须为-1,后续在对此数组进行注册的时候,会对 hf_xxx_startflag 进行赋值,保存此结 构单位的标识。 2.字符串 “XXX PDU Start Flags” ,作为参数传递给此结构,代表在详细信息窗口中, 此结构对应的协议字段的名称信息。显示位置如下图框选部分所示(不包括冒号):
我 使 用 的 是 VS2008, 所 以 在 这 里 把 值 为 MSVC2008 的 那 一 行 前 面 的 # 去 掉 , 其 余 MSVC_VARIANT 项保持不变。 (4)CYGWIN_PATH
将其设置为 Cygwin 的 bin 目录,例如 C:\Cygwin\bin. (5)PYTHON 及其后的 PATH
6. 编辑 config.nmake 文件 下载完成之后,在 wireshark 目录里面打开 config.nmake 文件,需要进行一些设置之后才
可以开始编译。 (1)WIRESHARK_LIBS:
设置编译 wireshark 所需要的库所在的目录。 (2)PROGRAM_FILES:
设置本机程序安装目录,默认即可。 (3)MSVC_VARIANT
2. 插件代码的编写
wireshark 由于采用插件技术,一个程序员开发一种新的协议分析模块的时候不需要了解 所有的代码,仅知道要生成的插件 dll 需要提供两个对外的接口就可以了。它们分别 是 proto_register 接口,作用是注册解析器的协议信息,另外一个是 proto_reg_handoff 接口,作 用是用来注册解析器的解析句柄。
2.解析器插件的核心
协议解析器的核心逻辑流程包括以下部分: 1、 注册协议:注册协议的名称,过滤字符串,及其它相关所需的结构。 2、 提供协议解析函数:关键部分,此函数由 wireshark 核心调用,处理协议的解析及
显示工作。
3.流程 3.1 创建目录
由于是插件方式,新建的目录需要在 wireshark 的 plugins 目录下,以需要解析的协议名 称命名,如 XXX。为避免麻烦,推荐所有自己可命名的协议名,都统一为一个。
1. 开发环境的搭建
我自己项目搭建环境时用到的软件包: 1. Visual Studio 2008 2. Python 2.4.3 3. Cygwin 2.510.2.2 4. Wireshark1.4.4 源代码 5. 编译时要用到的 Lib 库
1 安装 VS2008 安装好了 VS2008 之后,打开你的安装目录\Common7\Tools,将其中的 vsvars32.bat 文件
3.3.1 hf_register_info
其数据结构定义可参考相关头文件。 此结构是一个ቤተ መጻሕፍቲ ባይዱ于代表协议中用于解析各个字段信息的结构。使用的时候,通常使用数 组方式来代表协议中的诸多字段,如: static hf_register_info hf[] = {
{ &hf_xxx_startflag, { "XXX PDU Start Flags", "xxx.flags.start",
proto_XXX=proto_register_protocol(“Protocol full name”, “Protocol short name”, “protocol filter name”);
其中: proto_XXX:协议全局标识,用于后续相关的注册与解析工作。 声明语句如下: static int proto_XXX = -1; 声明时,必须赋值为-1,proto_register_protocol 函数会为其赋值为注册结果标识,供后 面使用。 函数参数为三个字符串:协议全名(用于详细信息部分显示 ),协议简称(用于相关界 面上的简单表示与描述)和协议过滤字符串(用于在过滤器处输入过滤规则时的匹配字符 串)。其中,过滤字符串必须小写。 最简单的协议注册,只需上面的 proto_register_protocol 函数调用即可,后续注册在 proto_register_XXX 中不是必须,起辅助作用。 注册参量部分除了注册协议名称外,还可以根据需要注册其他相关的数据结构。最常用 的,主要为以下几个数据结构:
图A
然后下载编译过程中所需要的库文件: nmake -f Makefile.nmake setup 这时,会在 wireshark_libs 目录下下载一些库文件并解压完成。最后执行以下命令就可以开 始编译了,整个编译过程需要点时间,如果系统没有出现什么提示错误,请不要关闭。 nmake -f Makefile.nmake distclean 来清除源代码中用于在其它平台下编译的文件 nmake -f Makefile.nmake all