网络管理课程设计(BER编解码,报文构造与解析)

上传人:碎****木 文档编号:229374588 上传时间:2021-12-25 格式:DOCX 页数:13 大小:80.16KB
返回 下载 相关 举报
网络管理课程设计(BER编解码,报文构造与解析)_第1页
第1页 / 共13页
网络管理课程设计(BER编解码,报文构造与解析)_第2页
第2页 / 共13页
网络管理课程设计(BER编解码,报文构造与解析)_第3页
第3页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《网络管理课程设计(BER编解码,报文构造与解析)》由会员分享,可在线阅读,更多相关《网络管理课程设计(BER编解码,报文构造与解析)(13页珍藏版)》请在金锄头文库上搜索。

1、计算机网络管理课程设计引言简单网络管理协议(SNMP)首先是由 Internet 工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决 Internet 上的路由器管理问题而提出的。 SNMP 被设计成与协议无关,所以它可以在 IP,IPX,AppleTalk,OSI 以及其他用到的传输协议上被使用。它具有简单性,易于扩展性的特点。SNMP 是一系列协议组和规范(见下表),它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP 也为设备向网络管理工作站报告问题和错误提供了一种方法。名字MIB SMI SNMP说明管理信息库管理信息

2、的结构和标识简单网络管理协议从被管理设备中收集数据有两种方法:一种是只轮询(polling-only)的方法,另一种是基于中断(interrupt-based)的方法。Snmp 发展到现在共有三个版本,本课程设计是基于 snmpv1 版本。2. 设计任务及思想2.1 任务:设计一个 Manager。Manager 可以向华为网络设备发送 get 和 set 报文,并获得有效操作结果,实现版本为 SNMPv1.开发工具:VC+(Win32)内容: Socket 网络通信、 BER 编码、BER 解码、SNMP 报文构造、SNMP 报文解析、用户输入/输出。2.2 思想:根据 snmp 协议,分析

3、抓包软件抓出的结果。Manager 在进行操作时,先对要发送的报文进行构造,然后对要发送的报文各数据类型依据 asn.1 进行编码再发送。agent 接收到报文后,进行报文解析,再解码。看 manager 的要求是什么,然后回应一个报文,即 response 报文,manager 即对回应的报文进行解析解码,整个过程由 socket 通信完成,snmp 报文封装在 udp 中发送。3 设计过程2.1 BER 编码和解码Ber 编码是整个设计过程中的极为重要的部分,一个报文有很多段组成,每段的数据类型都不尽相同。对每一种数据类型都要进行编码,即编成 tlv。计算机只认识 0 和 1;在编码时,

4、我们考虑把它编成一个字节一个字节的形式发送,便于解析处理。下面列出常用的几种数据类型的编码以及代码:整型:要考虑多种情况。void Integer_TLV(unsigned char *TLV,int &len,int value)unsignedchar * tlv;tlv=TLV; tlv0=INTEGER;/TLV_Tstack s;if (value=0)if(value128convert(s,value,2);int length=(s.top-s.base)%8); if(length=0)/intnum_8=(s.top-s.base)/8; tlv1=num_8+1;/TLV

5、_L len=2+num_8+1; tlv2=0;/valuefor(int k=num_8;k=1;-k)int sum_8=0;int local=k*8-1;int lastlocal=0; for(int j=0;j8;j+) int ee=0;Pop(s,ee); sum_8+=pow(ee*2,local-); lastlocal=ee;if(lastlocal=0)tlvnum_8+3-k=sum_8-1;else tlvnum_8+3-k=sum_8;elseint sum=0;int LENGTH=(s.top-s.base)/8;/tlv.V=new unsigned ch

6、arLENGTH+1; int firstlastlocal=0;for(int i=0;i=1;-k1)int num_8_bit=(s.top-s.base)/8;int sum_8_bit=0;int local_8=k1*8-1; int lastlocal=0;for(int j=0;j8;j+) int ee_bit=0;Pop(s,ee_bit); sum_8_bit+=pow(ee_bit*2,local_8-); lastlocal=ee_bit;if(lastlocal=0)tlvnum_8_bit+3-k1=sum_8_bit-1;elsetlvnum_8_bit+3-k

7、1=sum_8_bit;else字符型:比较简单,直接编成 asc 码就行了。标识符:void Objectidentifier_TLV(unsigned char *TLV,int &len,string value)string strdod=.;string smallstr; /bool strover=false;/char strl50;int j=0;for(int i=4;ivalue.length();i+)/(int)value.length 1.3.6.2.1string str=value.substr(i,1);/value.c_str()if(!strcmp(str

8、.c_str(),strdod.c_str()/strover=true; continue;/compare(value.substr(i,1) else/if(strover)smallstr+=str;unsignedchar * tlv; tlv=TLV;tlv0=OBER ;/1.3.6.1.0TLV_Ttlv1=1+smallstr.length();/TLV_l len=2+1+smallstr.length(); tlv2=43;/+smallstr; TLV_V for(int l=0;lsmallstr.length();l+)tlvl+3=atoi(smallstr.su

9、bstr(l,1).c_str();/Ip 地址:与标识符类似,只要把各部分分离出来编码即可。举个编码的例子如下:Snmp version =1 Comminutiy=public Command= get request RequestID=8Error status=0 (no error) Error index=0Object = 1.3.6.1.2.1.1.1.0(sysDesor.0)Value =null编成:48 40 2 1 0 4 6112 117 98 108 105 99 160 27 2 1 8 2 1 0 2 1 0 48 14 48 10 6 8 43 6 1 2

10、 11 1 0 5 0解码过程是编码过程的逆过程,相对而言,要简单一点。因为在编码时,我们编成一个个字节形式,除了字符型用 asc 码编码,其他都表示成十进制数的形式2.2 报文构造和解析整个报文的结构如下图,构造报文时,我们依据提示分别输入各个部分的数据,然后编码发送,报文构造即算完成。050006802b 06 01 02 01 01 01 0000整数字符串整数整数整数标识符(多个)Null(多个)020101 103028040670 75 62 6c 69 63021008A01b02100002100030e030c0报文的解析又是构造的逆过程,即分离出报文的各个部分,以便解码。对

11、应上面编码的例子, 我们对其编码进行解析如下图:注:此处用十六进制,具体实现时,我们编成十进制,便于直接察看。其中,围在方框内的是 Tag 字节,标有下划线的是长度字节,圆框里的是 value 部分编码。2.3 socket 通信与输入输出利用即套接字建立通信,发送编码好的报文给网关。主要是以下的三个函数。bool InitWinsock();void Cennect();void WaitTrap();至于输入输出,我们由于时间关系,没有能做出界面,虽然没有界面,对用户的操作带来不便,但是,我们每一步的操作都给了提示,操作还是很容易上手的。4. 设计结果程序运行结果如下图:我们实现了可以一次

12、输入多个变量名,然后返回多个 value 的值。并对其解析。我们把构造的报文发向网关 172.30.15.1,然后还可以自己自定义访问权限。Public ,private 等。抓包截图如下:我们实现了,getRequest,getnextRequest,setRequest 及 manager 收到的报文,trap 报文很遗憾没有实现。以下抓包抓的是set 报文,为了方便起见,因为只是调试,我们把value 字段的值定为 25。5. 评价和总结经过三天时间的紧张设计,熬了两个通宵,小组成员齐心协力,终于比较圆满的完成了课程设计的任务,实现了主要功能。测试时,我们向网关发送报文,能收到其回应的报

13、文并对其进行解析。由于时间的原因,设计上还存在缺陷,没有完成其全部功能,有些遗憾,对于报文的解析,特别是对超过一个字节的整数编码的解析还存在一些小问题。总的说来,完成情况良好,整个过程中,收获颇丰。不仅重新学习了被遗忘的 c 语言, 团队分工协作的能力,吃苦耐劳的精神都有提升。6 参考文献vc+开发基于 snmp 的网络管理软件武孟军 徐袭 任相臣编著 人民邮电出版社2007 年 1 月网络管理(第 2 版)郭军编著 北京邮电大学出版社 2003 年 9 月附录:主要程序代码报文构造代码如下:void BindSequenceOf_TLV(unsigned char *return_tlv_bind,int &return_tlv_bind_len,message MSG)/name value name valuefor(int i=0;i6;i+)/get return_tlv_bindunsigned char return_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号