Wireshark开发全攻略.docx
- 文档编号:5423136
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:66
- 大小:3.18MB
Wireshark开发全攻略.docx
《Wireshark开发全攻略.docx》由会员分享,可在线阅读,更多相关《Wireshark开发全攻略.docx(66页珍藏版)》请在冰豆网上搜索。
Wireshark开发全攻略
Wireshark开发全攻略
目 录
目 录2
1引言3
2修订历史3
3编译3
3.1Linux系统下编译3
3.2Windows系统下编译4
3.2.1安装MSVC4
3.2.2安装Cygwin5
3.2.3安装Python7
3.2.4SubvertionClient7
3.2.5编译Wireshark8
3.2.6(可选)创建Wireshark安装程序19
3.2.7执行编译好的Wireshark20
4系统架构20
5插件开发23
5.1解析器插件开发23
5.1.1AMIN协议23
5.1.2动态库26
5.1.3lua脚本46
5.2文件格式插件开发59
5.2.1MBX协议59
5.2.2动态库61
5.3注意事项75
引言
本文档对Wireshark开源代码的编译以及插件开发经验进行总结,以供后来者参考。
修订历史
日期
版本
说明
作者
2012-05-14
1.0.0
创建文档
Marsleo
2012-08-19
1.1.0
增加编译win64说明
Marsleo
2013-3-20
1.2.0
增加文件格式插件说明,调整目录结构
Marsleo
编译
Linux系统下编译
在Linux系统下编译wireshar比较简单,步骤如下:
1.从wireshark站点http:
//www.wireshark.org/download.html将源代码压缩包(例如wireshark-1.6.5.tar.bz2)下载并上传到相应的服务器。
2.将上传的源代码压缩包使用命令
tar-jxvfwireshark-1.6.5.tar.bz2
解压,生成源代码目录wireshark-1.6.5。
3.进入源代码的目录。
4.运行configure命令进行配置:
./configure
5.运行make命令进行编译:
make
6.如果需要安装,则执行下述命令:
makeinstall
在第4步时,可能会碰到如下几个情况:
1.没有安装C++编译器
此时如果服务器可以联网,则使用yuminstall来安装,具体命令如下:
yuminstallgcc-c++libstdc++-devel
2.没有安装automake库
此时如果服务器可以联网,则使用yuminstall来安装,具体命令如下:
yuminstallgcc-c++automake
3.没有安装libtoolize库
此时如果服务器可以联网,则使用yuminstall来安装,具体命令如下:
yuminstalllibtool*
4.没有安装gtk2+库
此时如果服务器可以联网,则使用yuminstall来安装,具体命令如下:
yuminstallgtk2-devel
Windows系统下编译
Wireshark依赖很多开源包以及一些其他工具(如Cygwin等)。
在Windows系统下进行wireshark开发首先得找全这些工具,这是第一步准备工作。
需要下载的工具有:
1.VisualC++2005ExpressEdition(C编译器)
2.Cygwin(一个Win32上的仿Unix平台)
3.Python(一种面向对象的高级脚本语言)
4.SubvertionClient(TortoiseSVN)(可选)
5.Wireshark依赖的开发包(将在下面提及)
安装MSVC
理论上编译wireshark可以使用MSVC6及以上的版本。
如果没有VS2005/VS2003等C语言编译器,可以从网上下个。
同时必须确认下载并安装Server2003R2的SDK(一般安了VS的话就会自动安装相应本机操作系统对应的SDK)。
安装MSVC的具体过程这里不赘述。
安装Cygwin
简单的来说,Cygwin可以使得Wireshark可以在Windows平台和Linux平台下编译。
Cygwin的安装程序是一个只有几百KB大小的壳子,可以从
下载的时候默认是default选项,即只下载默认的安装包,这对于编译wireshark是远远不够的,在wireshark里面提到必需要用到的安装包有:
·Archive/unzip
·Devel/bison
·Devel/flex
·Interpreters/perl
·Utils/patch
·Web/wget
所以在”SelectPackage”页这里需要改变下载选项,将Default变为Install,如下图所示:
在All->Default那里点击后,如下图所示:
然后依次将上述必需的安装包选中,例如:
接下来就是等待下载完成。
点击几次Next后,安装程序就会下载并安装所选的包(注:
这里说的比较简单,有几个界面没有说明,一个是选择操作的种类,要么在线安装,要么只下载安装包,要么从本地安装包安装Cygwin;还一个界面是从哪个网站下载。
都是些简单的英语,一看就懂)。
安装Python
Python从官方网站下载相应版本,例如http:
//www.python.org/ftp/python/2.5.1/python-2.5.1.msi。
其中版本的选择最好以wireshark源代码包中的config.nmake文件中的PYTHON_VER中定义的版本(例如PYTHON_VER=27,则选择python-2.7.*的版本)。
尽量使用配置文件里提到的版本,不然真的会编译不成功,另外建议不要修改默认安装路径。
SubvertionClient
这一步不是必须的,可以忽略。
对于选择Subversion客户端软件,我的专业意见是下载并使用TortoiseSVN。
开启右键菜单功能可能需要重启计算机才能生效。
这个功能很不错,当你在浏览试图中右键文件夹时会出现此菜单,通过他你能获取源代码树。
编译Wireshark
下载源代码
从wireshark站点http:
//www.wireshark.org/download.html将源代码压缩包(例如wireshark-1.6.5.tar.bz2)下载并解压到本地磁盘。
或者使用svn客户端TortoiseSVN将wireshark源代码下载到本地磁盘,方法为使用TortoiseSVN,checkout代码(http:
//anonsvn.wireshark.org/wireshark/trunk)。
使用TortoiseSVN下载源代码的步骤如下:
a.在Windows浏览器的任意一个本地文件夹上单击右键。
b.在弹出来的上下文菜单中,选中"SVNcheckout..":
c.在 URLoftherepository中填入源代码地址http:
//anonsvn.wireshark.org/wireshark/trunk/。
d.在 checkoutdirectory中写上想到导出的文件夹,例如c:
\wireshark。
e.点击OK.可能会提示说需要创建一个Wireshark文件夹。
选Yes。
f.TortoiseSVN开始检出源代码。
g.如果下载失败,可能是因为防火墙限制的原因。
如果是这种情况,你自己可以选个好的方法处理(注:
直接关了防火墙呗)
修改配置
获取源码后要修改源码的config.nmake文件来指定对应的对应的工具以及相关信息,主要修改有下面几项:
1)目标平台设置
WIRESHARK_TARGET_PLATFORM:
指定编译目标平台,只有win32或者win64是有效的。
默认是win32。
也可以在系统环境变量中设置该值。
2)版本信息设置
VERSION_EXTRA:
指定自定义编译个人版本信息,字符串形式,例如:
“-SVN-12345”,-myprotocol123.Minereads:
SVN-AMINPROTOCOL.你可以在这里写上任何你想写的东西。
如果不需要指定,则可以跳过这一步。
3)路径设置
WIRESHARK_LIBS:
依赖库的路径,依赖库可以通过makefile文件自动获取,一般有默认为:
!
IFDEFWIRESHARK_LIB_DIR
WIRESHARK_LIBS=$(WIRESHARK_LIB_DIR)
!
ELSE
WIRESHARK_LIBS=C:
\wireshark-$(WIRESHARK_TARGET_PLATFORM)-libs-1.6
!
ENDIF
后面提到的下载依赖库将存放到该目录。
PROGRAM_FILES:
应用程序的安装目录,通常保持默认值即可,一般为C:
/ProgramFiles。
这里要注意如果相关的应用程序不是在同一盘符下面安装的时候,可能会出现问题。
如果NSIS的安装目录不在这个地方,则需要修改相应的配置(例如安装在D:
\ProgramFiles(x86))。
HHC_DIR=$(PROGRAM_FILES)/HTMLHelpWorkshop//生成帮助文件的时候用到,好像安装系统的时候就默认安装到C:
/ProgramFiles。
MSVCR_DLL=$(PROGRAM_FILES)\MicrosoftVisualStudio8\VC\redist\x86\Microsoft.VC80.CRT\*.*//生产安装程序的时候会用到,打包VC的运行库,如果VisualStudio和NSIS安装在同一目录(例如都是D:
\ProgramFiles(x86))下,则不需要修改;否则需要根据自己安装的VisualStudio的版本配置不同的地方(例如安装的是VisualStudio2010,则要在相应的地方修改这个配置)
4)工具设置
CYGWIN_PATH=C:
\cygwin\bin//cygwin的安装路径
PYTHON="C:
/python25/python.exe"//设置python的路径
MAKENSIS="d:
\ProgramFiles\nsis\makensis.exe"//设置nsis打包工具的路径,根据自己的NSIS安装路径设置
INSTALL2_DIR=E:
\MyCode\wireshark\wireshark-gtk2//编译输出文件路径(GTK2版本的)
5)设置命令行环境
主要是设置关于VC的环境变量,使可以在命令行中直接运行nmake。
同时要把当前的目录设置成Wireshark源文件的目录。
MSVC_VARIANT:
指定编译器类型,这个要根据安装的MSVC的版本来配置。
这个地方很关键。
如果你的VS版本被注释掉了,那么要先把其他版本VS注释掉,只保留你的VS版本。
例如你用的VS是VS2005,则配置为MSVC_VARIANT=MSVC2005。
6)不依赖编译环境配置
按默认配置出来的wireshark特别是后面提到的动态库形式的插件会依赖VC的编译库(例如是vs2010,则依赖msvcr100.dll文件),如果使用者没有安装VisualStudio,则可能出现如下错误(在vs2010的情况):
解决该问题的方法为修改链接选项:
将其中的/MD修改为/MT:
进入命令行窗口
用MSVC命令提示工具“VisualStudio命令提示工具”(或者在编译32位时通过CMD进入后再去运行VC安装目录<如D:
\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\bin>下的vcvars32.bat脚本)进入上一小节描述的wireshark源代码目录。
第一种方法如下图所示:
第二种方法的步骤如下:
a.启动 cmd.exe (开始> 运行>"cmd")
b.执行"C:
\ProgramFiles\MicrosoftVisualStudio8\VC\bin\vcvars32.bat",如果是编译64位的,则跳过此步。
c.cdc:
\wireshark
检查准备工作
在Windows命令提示符窗口下运行:
nmake-fMakefile.nmakeverify_tools
如果所有必需安装的软件包都安装好了,则会出现如下界面:
如果有工具包没有装全,我们会从该命令的执行结果中看到的,比如:
Microsoft(R)ProgramMaintenanceUtilityVersion6.00.8168.0
Copyright(C)MicrosoftCorp1988-1998.Allrightsreserved.
Checkingforrequiredapplications:
cl:
/cygdrive/d/ProgramFiles/MicrosoftVisualStudio/VC98/bin/cl
link:
/cygdrive/d/ProgramFiles/MicrosoftVisualStudio/VC98/bin/link
nmake:
/cygdrive/d/ProgramFiles/MicrosoftVisualStudio/VC98/bin/nmake
bash:
/usr/bin/bash
bison:
/usr/bin/bison
ERROR:
Can'tfindflex.Thisis probablyanoptionalcygwinpackagenotyetinst
alled.Trytoinstallitusingcygwin'ssetup.exe!
NMAKE:
fatalerrorU1077:
'bash':
returncode'0x1'
Stop.
可以看出flex这个工具包没有安装,还好找到一个很好的cygwin各种包的下载站点xmission,速度很快,缺少什么就上去下载,然后到cygwin的根目录'/'下,
bzip2-dxx.tar.bz2
tarxvfxx.tar即可。
反复执行上面步骤直到运行verify_tools顺利通过为止。
还可能出现类似如下的错误提示:
不过这个错误不用管,不会影响编译。
下载依赖库
下载编译wireshark需要的依赖库文件,使用下述命令:
nmake-fMakefile.nmakesetup
这时会在WIRESHARK_LIBS目录下下载一些库文件并解压完成。
这个过程必须保持连接网络,而且时间会比较长,可能需要30分钟左右。
下载安装完成后会提示:
清理无用文件
第一次编译之前使用下面的命令:
nmake-fMakefile.nmakedistclean
清除一下windows编译用不到的文件。
编译
最后执行以下命令就可以开始编译:
nmake-fMakefile.nmakeall
整个编译过程时间比较长(正常情况下需要20分钟左右完成编译),请耐心等待,在系统没有出现明确提示之前,不要关闭窗口。
编译完成后会提示:
到这时整个编译过程就结束了,wireshark编译成功了。
编译win64
如果需要编译win64的wireshark,首先必须保证自己的机器是64位的。
其次需要在修改配置小节中的目标平台设置项中将WIRESHARK_TARGET_PLATFORM的值设置为win64(也可以在添加相应的系统环境变量):
完成上述要求后按照上述步骤进行到进入命令行窗口小节时,必须使用MSVC命令提示工具“VisualStudiox64Win64命令提示工具”进入Wireshark源代码目录:
如果不是使用该命令提示工具的话,在链接阶段将出现类似如下的错误:
接着进行到检查准备工作小节时,可能出现如下错误提示:
此时需要到站点http:
//www.wireshark.org/docs/wsdg_html_chunked/ChToolsMSChain.html#msvc-runtime-redistributable中根据自己安装的MSVC版本选择下载相应的vcredist_x64.exe文件(例如安装的是vs2010的,则进入到msvcr100.dll/vcredist_x86.exe/vcredist_x64.exe-Version10.0(2010)部分选择下载vcredist_x64.exe),下载完成后将其复制到config.nmake中WIRESHARK_LIBS中设置的路径下。
完成后重新进行检查准备工作及后续步骤。
(可选)创建Wireshark安装程序
如果想把编译好的Wireshark版本分发给其他人使用,可以通过执行下面的步骤来创建一个安装程序:
a.下载并安装NSIS.
b.如果编译的是win32,下载vcredist_x86.exe并把它放在c:
\wireshark-win32\libs目录;如果编译的是win64,则下载vcredist_x64.exe并把它放在c:
\wireshark-win64\libs目录。
该目录下可能已经存在此文件,所以最好先检查下。
c.使用CMD,按3.2.5节的步骤3,转到Wireshark的安装目录(如C:
\Wireshark)下,执行:
nmake–fMakefile.nmakepackaging
然后在你wireshark源代码目录下的packaging\nsis子目录就会有安装文件wireshark-setup.exe了(例如e:
\wireshark-1.6.5\packaging\nsis\wireshark-setup.exe)。
执行编译好的Wireshark
想要运行Wireshark的话直接执行C:
\wireshark\wireshark-gtk2\wireshark.exe并且确定程序已经启动。
如果之前没有安装WinPcap,则必须先下载并安装一次标准的Wireshark后才能运行自己编译的Wireshark。
可以从官网下载并安装标准Wireshark。
注意:
如果使用的是VS2005,那么必须使用编译Wireshark时所用的VS的版本去测试解析器。
由于某些原因,用VS2005编译的协议解析插件无法在主流的Wireshark版本上使用。
如果使用的其他版本,则不需要使用编译Wireshark时所用的VS版本(注:
大概意思应该是VS2005有BUG,如果用VS2005开发协议解析插件,那么开发出来的插件只能在用VS2005编译的Wireshark上使用)。
系统架构
Wireshark的结构可以分为四个主要模块:
CaptureCore、WireTap、ProtocolInterpreter和Dissector。
CaptureCore使用公共库WireTap从不同的网络中抓取数据(例如Ethernet,Ring等);
一旦取到数据后,WireTap就将它们保存为二进制文件;
因为数据是二进制文件,所以如果没有ProtocolInterpreter和Dissector,用户就不能看懂数据。
这里Dissector可以是内置形式的(Build-in),也可以是插件形式的(Plug-in)。
Dissector作为一个协议解析器,其要完成的工作是将数据包中,解析器所针对的协议部分的各个字段的信息,进行详细地呈现。
观察wireshark的界面程序,在显示一个数据包的详细内容的窗口中,是以一个树形的结构来将数据包划分成各层协议,并展示各部分的含义。
同时,在数据包列表主窗口中,还显示的有各个数据包的概览信息,并可以通过相关的过滤规则进行筛选显示。
所以,解析器的核心工作就在于数据包详细内容窗口部分的树形结构的维护,并结合过滤器、数据包列表等部分,进行筛选与信息的呈现。
协议解析器的核心逻辑流程包括以下部分:
1.注册协议:
注册协议的名称,过滤字符串,及其它相关所需的结构。
2.提供协议解析函数:
关键部分,此函数由wireshark核心调用,处理协议的解析及显示工作。
Wireshark的系统架构如下图所示:
Wireshark的整个源码的目录结构如下图所示:
插件开发
Wireshark默认支持大量网络协议,我们可以在Wireshark主菜单“Internals>SupportProtocols(slow!
)”查看当前支持的所有协议。
Wireshark1.6.7版本已支持1170种协议,包括我们熟悉的Diameter、GTP、FTP、SCTP等协议。
上述都是业界的通用协议,然而对我们产品的自定义协议,Wireshark是不得而知的,抓包后只能看到一串二进制码流,导致开发调试或者测试分析效率较低。
有什么办法让Wireshark也能解析自定义协议呢?
就是使用插件技术。
所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。
运用插件技术可以开发出伸缩性良好、便于维护的应用程序。
它著名的应用实例有:
媒体播放器winamp、微软的网络浏览器ie等。
Wireshark可以开发两种插件:
解析器插件和文件格式插件。
解析器插件主要就是针对传输层协议携带的数据进行解析,例如解析TCP协议携带的数据。
文件格式插件主要是打开文件格式是wireshark不支持的文件并对文件进行分割数据包进行解析,它一般包含了解析器插件的功能。
解析器插件开发
在Windows下有两种方式开发解析器插件,一种是开发动态库,另一种是编写lua脚本。
在介绍上述两种方法前,我们先来了解一个私有协议:
AMIN。
后面的开发都基于这个协议进行说明。
AMIN协议
Amin是一个足够说明IOCP协议的C/S结构的协议。
其协议结构非常简单,主要是基于TCP协议传输数据。
本文只是用它来说明怎样开发协议解析插件,所以在这里我们只解析C/S之间传输的文本消息。
传输文件则有点复杂,这里我们将忽略此种消息类型。
数据包长度前缀
所有的Amin数据包都用前面4个字节来表示后面数据长度。
这个值是以网络字节顺序,或者说MSB格式在网络上传输。
网络字节顺序的意思是最重要的信息放在开头。
例如,假定数据包长度是十进制12。
用十六进制则为0x0000000c(如果你以4个字节的long类型存储的话)。
如果你从网络上接受到这个值,那么此值将会以0c000000的形式出现;这就是网络字节顺序。
你可能会疑惑为什么字节顺序是反的。
如果你用字节数组来表示long类型,每个字节按顺序存储值。
在这种情况下,byte[0]的值是0x0c,所以0x0c写在了第一位。
理解网络字节顺序这个概念很重要。
当我们使用Wireshark来解析数据包时,理解2个或4个字节长度的整数在网络字节顺序或是说LSB格式下是怎样表示很重要。
而在其他协议中,值的表示方式一般为主机字节顺序,即LSB。
注意:
这个值表示的是接下来的数据长度,意思就是这开头的4个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Wireshark 开发 攻略