Wireshark网络协议解析原理与新协议添加方法 本文关键词:协议,解析,原理,添加,方法
Wireshark网络协议解析原理与新协议添加方法 本文简介:Wireshark网络协议解析原理与新协议添加方法摘要:为了快速对自定义网络协议进行协议解析,对wireshark网络协议解析原理与添加方法进行了深入的分析。在此基础上,对wireshark添加自定义网络协议的解析器。由于有效地利用了wireshark已有框架,该方式相对传统自行开发协议分析工具具有
Wireshark网络协议解析原理与新协议添加方法 本文内容:
Wireshark网络协议解析原理与新协议添加方法
摘要:为了快速对自定义网络协议进行协议解析,对wireshark网络协议解析原理与添加方法进行了深入的分析。在此基础上,对wireshark添加自定义网络协议的解析器。由于有效地利用了wireshark已有框架,该方式相对传统自行开发协议分析工具具有工作量少、功能强大与兼容性好的优点。
关键词:协议解析;wireshark;
网络分析
0引言
网络协议分析器(network
analyzer)是对通用协议的数据包进行解码,并以人可读的格式显示网络流量内容的软件或设备。由于网络协议种类繁多,各种新协议层出不穷,因此分析器必须具有良好的可扩展性,可方便地支持新的协议。
wireshark是一款免费开源的协议分析器,是目前应用最广泛的网络协议分析软件之一。本文介绍了wireshark网络协议解析的原理与新协议添加的方法,并分析了向wireshark中添加新协议解析器的两种方法,并对自定义的网络协议给出添加步骤。
1wireshark系统结构
wireshark的系统结构如图1所示,主要功能模块如下:①gtk
1/2:图形窗口工具,操控所有的用户输入/输出界面;②core:将其它模块连接起来,起到综合调度的作用;③epan:wireshark协议解析器;④capture:数据包捕获引擎,依赖于底层库winpcap/libpcap库;⑤wiretap:从磁盘读写数据包文件的引擎。
2数据包协议解析原理
2.1协议树
基于osi的7层协议模型,协议数据是从上到下封装后发送的,而对于协议解析需要从下至上进行。首先对网络层的协议识别后进行组包还原,然后脱去网络层协议头,将里面的数据交给传输层分析,这样一直进行下去,直到应用层。
由于网络协议种类很多,就wireshark所识别的500多种协议来说,为使协议和协议间层次关系明晰,从而对数据流中各层次的协议能够逐层处理,wireshark系统采用了协议树的方式,如图2中所示。图2中udp协议的所有数据都是封装在ip协议中的,那么udp协议就是ip协议的一个协议子节点,具有相同父节点的协议成为兄弟节点,如tcp与udp节点。
图1wireshark的系统结构图图2一个简单的协议树
wireshark采用协议的特征字来识别拥有同样父协议的兄弟节点协议。每个协议注册自己的特征字,这些特征字给子节点协议提供可以互相区分开来的标识。在wireshark中注册一个协议解析器首先需要指出它的父协议是什么,另外还需指出自己区别于父节点下所有兄弟节点协议的特征字。
由于采用了协议树加特征字的设计,wireshark在协议解析上具备了很强的扩展性,增加一个协议只需要将该协议相关的解析函数挂到协议树上相应的节点即可。
2.2添加协议解析器的方式
向wireshark添加新协议解析器有两种方式:内置型(builtin)和插件型(plugin)。
2.2.1插件型(plugin)
插件型是构建一个插件(如一个动态连接库),并把它自己注册到主程序中,执行解析工作。
插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信。并且,在宿主程序不变的情况下,可通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。
由于现在网络协议种类繁多,为了可以随时增加新的协议解析器,wireshark也采用了插件技术。如果需要对一个新的协议进行解析,只需要开发这个协议解析器,并调用注册函数向主程序注册就可以了。
2.2.2内置型(builtin)
内置型是把一个协议解析器编译进主程序中,它将一直可用。
内置型与组件型的差异很小,只不过内置型的重构周期比组件型的长很多,同时没有插件型那么灵活。
3数据包解析器代码结构
新增加一个协议解析器的步骤一般分为注册协议,初始化解析器,实际解析处理3个步骤,下面以自定义协议演示如何增加一个协议解析器。插件型与内置型两种方式的代码结构基本相同,此处不做区别。自定义协议(foo
protocol)格式如表1所示。
表1自定义协议格式
数据包类型标识序号ip地址该协议为udp协议的子协议,端口为1234,其中:
数据包类型——
一个字节,可能取值:1—初始化,2—终止,3—数据。
标识——
一个字节,可能取值:0x01—开始数据包,0x02—结束数据包,0x04—优先数据包。
序号——
两个字节。
ip地址——
四个字节。
3.1注册协议
主要调用proto_register_protocol函数来注册协议。
#define
foo_port
1234
static
int
proto_foo
=
-1;
static
gint
ett_foo
=
-1;
void
proto_register_foo(void)
{
static
hf_register_info
hf[]
=
{
{
/*
设置协议子树数组*/
static
gintett[]
=
{
/*调用proto_register_protocol函数注册协议*/
proto_foo
=
proto_register_protocol
(
“foo
protocol”,/*
协议名称/
“foo”,/*
短名称(short
name)/
“foo”/*
协议简写名称*/
);
proto_register_field_array(proto_foo,hf,array_length(hf));
proto_register_subtree_array(ett,array_length(ett));
}
3.2初始化解析器
把udp端口进行绑定,所以主程序在接收到该端口的udp数据包后就调用该解析器。其中dissect_foo为做实际解析工作的函数。
void
proto_reg_handoff_foo(void)
{
static
dissector_handle_t
foo_handle;
foo_handle
=
create_dissector_handle(dissect_foo,proto_foo);
dissector_add(“udp.port”,foo_port,foo_handle);
}
3.3实际解析处理
添加对具体协议各字段的解析。
static
int
hf_foo_pdu_type
=
-1;
static
int
hf_foo_flags
=
-1;
static
int
hf_foo_sequenceno
=
-1;
static
int
hf_foo_initialip
=
-1;
static
void
dissect_foo(tvbuff_ttvb,packet_infopinfo,proto_treetree)
{
gint
offset
=
0;
/*检查协议列是否可以在用户界面显示*/
if
(check_col(pinfo->cinfo,col_protocol))
{
col_set_str(pinfo->cinfo,col_protocol,“foo”);
}
/*
如果能显示,清除info列中的数据*/
if
(check_col(pinfo->cinfo,col_info))
{
col_clear(pinfo->cinfo,col_info);
}
/*
添加一个子协议,并对协议进行解析*/
if
(tree)
{
proto_itemti
=
null;
proto_treefoo_tree
=
null;
ti
=
proto_tree_add_item(tree,proto_foo,tvb,0,-1,false);
foo_tree
=
proto_item_add_subtree(ti,ett_foo);
proto_tree_add_item(foo_tree,hf_foo_pdu_type,tvb,offset,1,false);
offset
+=
1;
proto_tree_add_item(foo_tree,hf_foo_flags,tvb,offset,1,false);
offset
+=
1;
proto_tree_add_item(foo_tree,hf_foo_sequenceno,tvb,offset,2,false);
offset
+=
2;
proto_tree_add_item(foo_tree,hf_foo_initialip,tvb,offset,4,false);
offset
+=
4;
}
}
有关协议解析器添加更详细、更具体的内容参见文献[2]。
4解析器代码的编译
插件型与内置型解析器代码的编译区别较大,对此分别说明。
4.1.1插件型(plugin)
为了编译该解析器代码来创建该插件,除了解析器的源代码packet-foo.c外,还需要在该源代码文件所在目录下创建下列一些文件,其包含了windows平台与unix/linux平台下的各自所需文件。①makefile.am
——
unix/linux的makefile
模板;②makefile.common
——
包含插件文件的名称;③makefile.nmake
——
包含wireshark插件的windows平台下的makefile;④moduleinfo.h
——
包含插件版本信息;⑤moduleinfo.nmake
——
包含windows
平台下动态链接库(dll)的版本信息;⑥packetfoo.c
——
自定义协议解析器的源代码;⑦plugin.rc.in
——
包含windows
平台下的dll资源模板。
makefile.common与makefile.am文件必须修改,来反映相关的文件与解析器名称。
moduleinfo.h
与moduleinfo.nmake文件必须填写版本信息。
把该解析器编译成一个动态连接库或共享库,并复制到已安装wireshark的plugin目录下,即可使用。
4.1.2内置型(builtin)
内置型协议解析器源代码都在目录wireshark-1.2.0//epan//dissectors下。此处,我们以添加udp协议为例,说明内置型添加协议解析器的步骤:
第一步:将要添加的协议解析器源文件packet-udp.c和头文件packet-udp.h放在此目录下;
第二步:在此目录下修改makefile.common文件,分别将源文件和头文件名添加到对应的dissector_src和dissector_include宏下面。
dissector_src
=
/…
packetudp.c/…
dissector_includes
=/…
packetudp.h/…
第三步:最后对整个工程进行编译连接,就可以把要添加的协议解析器,如同wireshark大多数内置解析器一起被整合编译到libwireshark中。
5结束语
在自行开发自定义协议分析器时,除了需要处理大量底层数据捕获、缓存与存储的开发工作外,还涉及到复杂的数据包过滤、网络信息统计与数据包内容显示的开发工作,并且很难提供足够的实用功能。
通过有效利用wireshark已有框架,使得自定义协议解析器的开发量可显著减少,并可提供功能强大与兼容性更好的协议解析器,从而为网络分析工作提供强有力的工具支持。
参考文献:
[1]winpcap
技术文档4.0.1[eb/ol].http://www.winpcap.org.20110610.
[2]wireshark
developer’s
guide
29135
for
wireshark
1.2.0[eb/ol].http://www.winpcap.org.20110610.
[3]罗青林,徐克付,臧文羽,等.wireshark环境下的网络协议解析与验证方法[j].计算机工程与设计,2011(3).
篇2:《就业协议书》填写与使用说明
《就业协议书》填写与使用说明 本文关键词:协议书,使用说明,填写,就业
《就业协议书》填写与使用说明 本文简介:《就业协议书》填写与使用说明一、填写说明1、《就业协议书》一式四联,为复写纸,填写时请用力书写或分两次填写以确保四页字迹都清晰,建议分两次填写,如采用分两次填写,请注意:第一次填写之前,先在第二联后垫上一张稍厚些的纸再填写,以免字迹渗入第三、四联而导致无法进行第二次填写。2、①“甲方(学生)基本信息
《就业协议书》填写与使用说明 本文内容:
《就业协议书》填写与使用说明
一、填写说明
1、《就业协议书》一式四联,为复写纸,填写时请用力书写或分两次填写以确保四页字迹都清晰,建议分两次填写,如采用分两次填写,请注意:第一次填写之前,先在第二联后垫上一张稍厚些的纸再填写,以免字迹渗入第三、四联而导致无法进行第二次填写。
2、
①“甲方(学生)基本信息”栏:由毕业生填写,培养方式为并轨,学校联系部门为学院,联系人为辅导员,
联系电话为辅导员办公室电话。
②“乙方(用人单位)基本信息”栏:由用人单位填写。
③协议“第一条——第七条”:毕业生确定与用人单位签约后,由双方在协商一致的基础上填写具体内容。
④“甲方意见”栏:毕业生确定与用人单位签约后,填写意见并签名。
⑤“乙方意见”栏:用人单位确定与毕业生签约后,填写意见并加盖单位公章。
⑥“用人单位上级主管部门意见”栏:由用人单位上级主管部门填写并加盖单位公章。用人单位有用人自主权的,此栏可略。“某用人单位有用人自主权”的含义是:有独立的人事档案管理权,可直接接收毕业生毕业后的户口、档案、党团组织关系等人事关系。一般为国家机关、事业单位、国有企业等公有制性质单位。
二、使用说明
1、《就业协议书》,毕业生一人一号一份,一份四联,仅限本人与用人单位签约时使用,不得转借他人,姓名涂改无效。
2、《就业协议书》因为是复写纸,所以在使用时应避免划痕、折皱或污损。
3、毕业生与用人单位签订《就业协议书》时,要本着双方平等自愿、协商一致的原则慎重签约。
4、为维护双方权益,避免在签约过程中可能出现的纠纷,毕业生与用人单位口头达成的签约或解约事宜应以书面形式在“第二条”或“第五条”内注明。
5、与用人单位签好《就业协议书》、手续完备之后,白联、蓝联交辅导员,黄联交用人单位,红联自己保存。
6、部分学生因考研或其他原因目前暂不需使用《就业协议书》,
请妥善保管好自己的《协议书》,因为明年5、6月份办理考研调档、人事代理等手续时,必须要凭本人《就业协议书》方能办理。
三、补办换领
1、个别毕业生因《就业协议书》污损严重而需要重新换领的:持《就业协议书》到就业指导中心办理换领。
2、个别毕业生因遗失而需要重新补领的:①
本人写一份遗失说明。②交辅导员审核、签名确认并加盖学院公章。③
持学院审核过的遗失说明到就业指导中心办理遗失网上公示手续。④在就业信息网上公示一个月,如公示结果无异议,才能到就业指导中心办理补办。
3、个别毕业生已与用人单位签约,但确因特殊情况,需要与用人单位解除《就业协议书》的:
①用人单位提供同意解除协议的《解约证明》(必须加盖用人单位公章,否则无效)。②《解约证明》交辅导员审核、签名确认并加盖学院公章。③h
持原《就业协议书》和《解约证明》到就业指导中心办理换领。
4、《就业协议书》发放给毕业生之后,中心剩余的《协议书》数量有限,毕业生在使用时应尽量避免污损、遗失。
5、办理与咨询地点:花津校区:大学生活动中心三楼:5910093
赭山校区:学生食堂四楼:3883552
《就业推荐表》填写与使用说明
1、《就业推荐表》是毕业生参加各种招聘会时,自荐材料中的一份重要材料。该表一人一份,毕业生应如实、认真填写,学习经历栏填写高中和大学的信息即可。为避免填写错误,毕业生可先写好草稿,然后再誊写到表上。填写完毕后,由辅导员审核并加盖学院公章方能使用。毕业生因应聘需要,此表可复印多份多次使用,但请保留好《就业推荐表》原件。
2、确因填写错误需要重新更换的,请携带填写错误的《推荐表》到辅导员老师处换领。
3、《就业推荐表》如不慎遗失,需本人写一份遗失说明,由辅导员确认情况后补发一份新的就业推荐表。
就业指导中心
2012-10-26
篇3:职工工资保证资金托管协议
职工工资保证资金托管协议 本文关键词:职工工资,保证,协议,资金,托管
职工工资保证资金托管协议 本文简介:附件二:职工工资保证资金托管协议甲方(保证资金支付方):浙江电联建筑安装有限公司乙方(保证资金监管方):山西省通信行业协会通信建设设计施工专业委员会丙方(保证资金托管方):中国建设银行分(支)行为了加强对职工工资(含农民工工资下同)保证资金的管理,经甲乙丙三方一致同意,在平等自愿的基础上签署此协议书
职工工资保证资金托管协议 本文内容:
附件二:
职工工资保证资金托管协议
甲方(保证资金支付方):
浙江电联建筑安装有限公司
乙方(保证资金监管方):山西省通信行业协会通信建设设计施工专业委员会
丙方(保证资金托管方):中国建设银行
分(支)行
为了加强对职工工资(含农民工工资下同)保证资金的管理,经甲乙丙三方一致同意,在平等自愿的基础上签署此协议书。
释义:职工工资保证资金托管服务指丙方受甲、乙双方委托,为其托管职工工资保证资金,并按本协议约定提供职工工资保证资金的存储、支取和返还等金融服务。
第一条:经甲、乙双方协商一致,特此授权丙方托管甲方缴交的职工工资保证资金
元(金额须大写)。丙方对职工工资保证资金实行管理。
甲方应按乙方核定的保证金额度于*年*月*日前一次性存入保证金专户。
第二条:按照人民银行有关规定,开立账户需办理如下手续:
1、提供与政府或相关主管部门签订的有关协议(本协议)
2、填制“开立账户申请书”并签订“账户管理协议”
3、提供存款账户开户所需的原件及复印件
4、出具其开立存款账户规定的其他证明文件
第三条:本协议书作为甲方、乙方和丙方存储、支取职工工资保证资金的凭据。甲方支取职工工资保证资金时,需向丙方出具本协议书和乙方出具的《工资保证金支取通知书》。缺少上述要件的,丙方不为甲方办理保证资金支取手续。
第四条:
甲方将资金存入职工工资保证金专户后,可享受银行相关定期存款利率,如中间支取时达不到相关定期利率存款条件的按银行活期利率结算。
第五条:
丙方接受甲方、乙方委托提供保证金托管服务。对职工工资保证资金不足部分不垫款,对职工工资资金划付具有监管责任。丙方在收到甲方存入的职工工资保证资金后,当即出具《工资保证金存储证明》通知乙方。
第六条:本协议缺少甲乙丙三方任何一方签字盖章,均视为无效协议。
第七条:本协议一式三份,甲乙丙三方各执一份,自三方法定代表人(负责人)或授权代理人签字并加盖公章之日起生效。
甲方
负责人或授权代理人(签字和/或单位公章)
乙方
监管代表人或授权代理人(签字和/或单位公章)
丙方
负责人或授权代理人(签字和/或单位公章)*年*月*日
工资保证金存储证明
兹证明
公司,为承建通信工程建设项目,已在建设银行五一路支行开设工资保证金专用帐户(开户全称:
,帐号:
),存入工资保证金
元
(大写:
)。
特此证明。
建行五一路支行*年*月*日
-------------------------------------------------------
工资保证金支取通知书
建设银行五一路支行:
经与
公司协商,同意从该公司工资保证金专用帐户(开户全称:
,帐号:
)中,支取现金
元
(大写:
),支付职工工资。
特此通知。
山西省通信行业协会通信建设设计施工专业委员会*年*月*日