wireshark插件开发总结.doc_第1页
wireshark插件开发总结.doc_第2页
wireshark插件开发总结.doc_第3页
wireshark插件开发总结.doc_第4页
wireshark插件开发总结.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Wireshark插件开发总结一Windows环境下wireshark编译环境的设置:.准备好编译wireshark所必须使用到的工具及文件:1. Microsoft Visual Studio 2010;2. Cygwin;3. Python 2.7;4. Wireshark-win32-libs;5. Wireshark 1.6.5源码包;.配置环境: 1.安装好VS2010,找到vsvars32.bat的路径。(每次编译开始前,需运行该bat文件,设置好VS2010编译环境)。 我的该bat文件路径为:F:VS 2010Common7Tools;2.选择在线或本地安装Cygwin,Cygwin主要是用来在Windows下模拟UNIX系统环境。在安装过程中,必须保证已安装以下几个包: a. Archive/unzipb. Devel/bisonc. Devel/flexd. Interpreters/perle. Utils/patchf. Web/wget3.下载并安装Python到默认路径下,我下载的版本为:Python 2.7.2。4. 在/wireshark-win32-libs/trunk/packages/ 网站下载编译wireshark所依赖的库文件。 注:不要解压,将下载的zip包放至C:wireshark-win32-libs目录下即可。5.在wireshark官网下载将编译的源码包,网址为:/download/src/all-versions/%E4%B8%8A%E4%B8%8B%E8%BD%BD,我下载的版本为1.6.5。 . 更改wireshark源码配置文件:打开wireshark源码所在目录,修改其根目录下的config.nmake文件:1. VERSION_EXTRA: 这里可以自定义个人版本信息。2. WIRESHARK_LIBS:设置编译所依赖的库文件所在目录。3. PROGRAM_FILES:设置本机程序安装目录,默认即可。4. MSVC_VARIANT:我使用的是VS2010,将MSVC_VARIANT为MSVC2010行的#去掉即可。5. CYGWIN_PATH:设置Cygwin的bin目录。我的bin文件目录为:D:Linuxcygwinbin。6. PYTHON 及其后的PATH:将其修改问自己安装的Python文件目录即可。7. MSVCR_DLL:用绝对路径修改成自己VS2010的安装目录。8. MAKENSIS:该选项为安装程序制作工具,如果没有用#注释掉。.编译wireshark源码: 在确定上述准备工作已经完成的基础上,打开运行vsvars32.bat文件后,跳转到wireshark源码所在目录,首先通过下面的命令行验证一下:nmake f Makefile.nmake verify_tools,如果有错误的话,可能是变量设置错误或者版本不符合要求,根据错误提示修改相应错误。然后编译库文件,执行:nmake f Makefile.nmake setup,该命令执行后会将wireshark-libs目录下的库文件解压。执行:nmake f Makefile.nmake distclean清除其他平台的冗余代码,最后执行:nmake f Makefile.nmake all完成整个编译过程。 执行完上述操作后,打开C:wiresharkwireshark-gtk2 目录, 运行其中的wireshark.exe。将会看到wireshark的主界面。至此整个源码编译过程就告一段落了。二编写代码:本文主要的对新添加的Scoreboard协议进行解析,ScoreBoard协议用于更新比分牌的数值的背景颜色,服务端监听UDP1127端口,客户端端口任意。报文格式每个报文的前16字节是固定的识别符identifier:e2 cb b5 80 cb 09 4e ba a3 6b f6 07 ce 95 3f 2b 第17字节表示报文类型operator: 00 get-value 获取比分数值 01 set-value 设置比分数值 80 resp-value 应答比分数值 10 get-color 获取背景色 11 set-color 设置背景色 90 resp-color 应答背景色 数据部分: 01、80类型的报文 o 第1821字节为左边的比分数值(32位无符号整数,big endian) o 第2225字节为右边的比分数值(32位无符号整数,big endian) 11、90类型的报文 o 第18字节为红色分量 o 第19字节为绿色分量 o 第20字节为蓝色分量 在plugins文件夹下新建scoreboard目录,在该目录下新建packet-scoreboard.c文件,代码内容如下:#ifdef HAVE_CONFIG_H# include config.h#endif#include static void dissect_scoreboard(tvbuff_t *tvb, packet_info *pinfo, proto_tree tree);static int proto_scoreboard = -1;static int hf_scoreboard_id = -1;static int hf_scoreboard_cmd = -1;static int hf_scoreboard_score_left = -1;static int hf_scoreboard_score_right = -1;static int hf_scoreboard_color_red = -1;static int hf_scoreboard_color_green = -1;static int hf_scoreboard_color_blue = -1;static gint ett_scoreboard = -1;static const value_string names_cmd = 0x00, request score , 0x01, set score , 0x80, response score , 0x10, request color , 0x11, set color , 0x90, response color , 0, NULL ;void proto_register_scoreboard(void)static hf_register_info hf = &hf_scoreboard_id, ScoreBoard ID, scoreboard.id, FT_BYTES,BASE_NONE, NULL, 0, NULL, HFILL ,/FT_BYTES 仅能为BASE_NONE 方式显示 &hf_scoreboard_cmd, Command, scoreboard.cmd, FT_UINT8,BASE_HEX, VALS(names_cmd), 0, NULL, HFILL ,/VALS()宏,仅进行类型转换 &hf_scoreboard_score_left, Score Left, scoreboard.sleft, FT_UINT32,BASE_DEC, NULL, 0, NULL, HFILL , &hf_scoreboard_score_right, Score Right, scoreboard.sright, FT_UINT32,BASE_DEC, NULL, 0, NULL, HFILL , &hf_scoreboard_color_red, Color Red, scoreboard.r, FT_UINT8,BASE_HEX, NULL, 0, NULL, HFILL , &hf_scoreboard_color_green, Color Green, scoreboard.g, FT_UINT8,BASE_HEX, NULL, 0, NULL, HFILL , &hf_scoreboard_color_blue, Color Blue, scoreboard.b, FT_UINT8,BASE_HEX, NULL, 0, NULL, HFILL ,;static gint *ett = &ett_scoreboard;/我们只需要一个子树,显示分值与颜色分量proto_scoreboard = proto_register_protocol(Score Board Protocol,ScoreBoard,scoreboard);proto_register_field_array(proto_scoreboard, hf, array_length(hf);proto_register_subtree_array(ett, array_length(ett);void proto_reg_handoff_scoreboard(void)dissector_handle_t scoreboard_handle;scoreboard_handle = create_dissector_handle(dissect_scoreboard,proto_scoreboard);dissector_add(udp.port, 1127, scoreboard_handle);static void dissect_scoreboard(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)int offset = 0;/偏移变量,记录偏移位置col_set_str(pinfo-cinfo, COL_PROTOCOL, ScoreBoard);/显示协议col_clear(pinfo-cinfo, COL_INFO);if (tree) guint8 cmd_result=0;/用于保存获取到的操作类型值proto_item *ti = NULL;/方便添加结点而定义proto_tree *tt = NULL; /方便添加结点而定义ti = proto_tree_add_item(tree, proto_scoreboard,tvb, 0, -1, FALSE);/添加结点tt = proto_item_add_subtree(ti, ett_scoreboard);/添加子树,用以显示数据 proto_tree_add_item(tt,hf_scoreboard_id,tvb,offset,16,FALSE);offset+=16;proto_tree_add_item(tt,hf_scoreboard_cmd,tvb,offset,1,FALSE);cmd_result=tvb_get_guint8(tvb,offset);offset+=1;/获取操作类型switch(cmd_result)case 0x00:case 0x01:/添加左边比分结点 proto_tree_add_item(tt,hf_scoreboard_score_left,tvb,offset,4,FALSE);offset+=4;/添加右边比分结点 proto_tree_add_item(tt,hf_scoreboard_score_right,tvb,offset,4,FALSE);offset+=4;break;case 0x80:proto_tree_add_item(tt,hf_scoreboard_score_left,tvb,offset,4,FALSE); proto_tree_add_item(tt,hf_scoreboard_score_right,tvb,offset,4,FALSE);offset+=4;break;case 0x10:case 0x11:/添加颜色分量结点proto_tree_add_item(tt,hf_scoreboard_color_red,tvb,offset,1,FALSE);offset+=1;proto_tree_add_item(tt,hf_scoreboard_color_green,tvb,offset,1,FALSE);offset+=1;proto_tree_add_item(tt,hf_scoreboard_color_blue,tvb,offset,1,FALSE);offset+=1;break;case 0x90:proto_tree_add_item(tt,hf_scoreboard_color_red,tvb,offset,1,FALSE);offset+=1;proto_tree_add_item(tt,hf_scoreboard_color_green,tvb,offset,1,FALSE);offset+=1;proto_tree_add_item(tt,hf_scoreboard_color_blue,tvb,offset,1,FALSE);offset+=1;break;default:break;offset+=4;至此协议解析代码部分编写完成。三插件的插入及编译:1.在自己编写的插件目录(scoreboard)下,放入以下文件: AUTHORSCOPYINGChangeLogCMakeLists.txtMakefile.amMmonMakefile.nmakemoduleinfo.hmoduleinfo.nmakeplugin.rc.in 这些文件,可以从plugins/gryphon/目录下拷贝,然后在对其修改。具体修改步骤参考后面2,3步骤。 Wireshark文件介绍: Makefile.am:这个是UNIX/Linux平台下的makefile模板。 Mmon:这个文件包含了内置插件所依赖的文件。 Makefile.nmake:这个文件是Windows平台下WireShark内置插件的makefile。 moduleinfo.h:内置插件的版本信息。 moduleinfo.nmake:Windows平台下DLL的版本信息。plugin.rc.in:Windows平台下的DLL资源模板。 2.修改本目录下的相关文件: (1). 将makefile.am文件中的gryphon单词全部替换成scoreboard。 (2). mon文件中的变量DISSECTOR_SRC 中,需要将自己插件会导出,register_*() 和handoff_*() 的主要的源代码文件列入,本例中即packet-scoreboard.c。 (3). moduleinfo.h 文件中, 将版本号改为自己需要的版本号即可. (4). moduleinfo.nmake文件中,仅需改动版本号,但要和前一步的版本号相同。 (5). plugin.rc.in 文件是windows 下编译使用的资源文件,用于添加给dll文件的特定信息。 (6). 修改mon文件中的PLUGIN_NAME为scoreboard。 3.修改自己插件目录以外的文件: (1). plugins/Makefile.am 文件中,需要将自己插件所在的目录(本例中为scoreboard)添加入SUBDIRS 变量中。(2). 在最顶层的Makefile.am 中,添加dlopen plugins/scoreboard/scoreboard.la语句到plugin_ldadd 中。 (3). 在最顶层的configure.in 文件中,添加plugins/scoreboard/Makefile语句到AC_OUTPUT 规则中。 (4). 在epan/Ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论