基于SNMP协议的简单网络控制的实现.doc_第1页
基于SNMP协议的简单网络控制的实现.doc_第2页
基于SNMP协议的简单网络控制的实现.doc_第3页
基于SNMP协议的简单网络控制的实现.doc_第4页
基于SNMP协议的简单网络控制的实现.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

基于SNMP协议的简单网络管理的实现因为工作的原因,需要将原来基于MCF5474平台上的IDU软件系统移植到AT91SAM9G20上。IDU软件提供了用户与设备间交互的界面,方便用户通过Web和SNMP方式来管理IDU、ODU设备,可以通过Web的方式进行日志查看,实时检测网络节点的系统状态。以时间设置为例,如图所示:当点击左边的菜单栏中时间设置,即可出现右边的信息,可以对时间和日期的查询和修改。因此,只需在9G20平台上实现一个最简单的基于SNMP协议网管控制,那么其余的一些操作也是类似的。其基本原理是:在WEB界面上提交相关的设置信息,然后通过SNMP管理端将信息打包发送到代理端,最后在代理端实现对底层硬件的操作。就按着这个思路,开始进行移植工作。1:在上位机中,输入目标机的IP地址,即可看到登录界面:在这里需确保目标机上已经移植了BOA服务器,并启动该应用程序(这一步请参考嵌入式boa服务器的移植.doc)。那么在这里看下关于boa的默认网址:index.htmlset passwordpassword:这是HTML的文本语言,挺简单的吧,在上位机中输入目标机的IP的地址,显示如图所示:2:顺着index.html,再来看来pwd的源代码pwd.c,该文件主要实现密码验证,通过CGI来获取index.html提交的表单中的内容,并将它按照password=%s格式存放在passwd中,然后打开password.c文件(文件内容password=123),并将文件内容存放到temp中,最后通过比较passwd和temp数组中的内容是否一致,来判断是否能登陆成功。int main() int i,len; char buff100,temp100,pwd16; printf(Content-type: text/html nn); if(getenv(CONTENT_LENGTH) len = atoi(getenv(CONTENT_LENGTH); for(i=0;ilen;i+) buffi = getchar(); bufflen = 0;/获取表单中的内容 sscanf(buff,password=%s,passwd); FILE *fp; fp = fopen(DATAFILE,r); if(NULL=fp) prtError();return -1; while(fgets(temp,sizeof(temp),fp) sscanf(temp,password=%s,pwd); fclose(fp); if(0=strcmp(passwd,pwd) prtSuccess(); else prtError(); return 0;当密码验证成功后,即执行prtSuccess();再来看看这个里面放的是什么?void prtSuccess()printf(n); printf(LoginSuccessn); printf(n);printf();printf();printf(); printf(n); printf(n); char script512= ;char temp250 = document.pwd_form.submit();char script120= ; strncat(script,temp,strlen(temp);strncat(script,script1,strlen(script1);printf(script); fflush(stdout); 3:可以看到当登录成功后,它将运行datesetup。再看看datesetup如何实现时间的设置。datesetup.cint main()printf(Content-type: text/html nn); printf(n); printf(idu settings);printf(n); printf();printf();printf();printf();timeSet();printf(n);printf(n);printf(n);fflush(stdout);return 0;当设置成功后,将会执行settime,再来看看settime是如何实现对实现的设置。settime.c,对日期和时间设置的一个基本流程,从datesetup中获取表单中提交的值,然后根据JavaScript中提交的值是0还是1,来决定是执行日期还是时间的设置。int main()int i,len;char buff255,cmd1;printf(Content-type: text/html nn);if(getenv(CONTENT_LENGTH) len = atoi(getenv(CONTENT_LENGTH); for(i=0;ilen;i+) buffi = getchar(); bufflen=0;printf(buff=%sn, buff);char dst100100;int num = split(buff,&, dst, 100);sscanf(dst0,cmd=%s,cmd); printf(n); printf(idu settings);printf(n);printf(cmd=%sn, cmd);printf(len=%dn, len);printf(buf=%sn, dst);if(0 = atoi(cmd)led亮 if(1 = atoi(cmd)led灭 (为了调试的方便,在这里对日期和时间的设置,实质上是对LED灯的控制。)LED测试结果:当datesetup提交的表单中CMD=0,LED亮,当CMD=1,LED灭。4:基于SNMP协议管理端的实现if(0 = atoi(cmd)char temp1024 = ;strncat(temp, 0, 1);/ 建立UDP连接int nread, nwrite;/uint8_t bufMAXLINE;int listen_fd = udp_open_listenfd(1162);if (listen_fd = 0) return -1;g_fd = listen_fd;struct sockaddr_in clientaddr;socklen_t socklen = sizeof(clientaddr);clientaddr.sin_family = AF_INET;clientaddr.sin_port = htons(161);inet_pton(AF_INET, 127.0.0.1, &clientaddr.sin_addr);/封装SNMP消息。snmp_msg msg,ret_msg;msg.snmp_version = 0;strcpy(msg.snmp_community, COMMUNITY);msg.snmp_type = SNMP_VALUE_TYPE_SET_REQ;msg.snmp_req_id = 0x01020304;msg.snmp_error_status = 0;msg.snmp_error_id = 0;msg.snmp_val0.snmp_val_type = SNMP_VALUE_TYPE_NULL;msg.clientaddr = clientaddr;msg.clilen = len;strcpy(msg.snmp_val0.snmp_object, SNMP_OBJECT_35);msg.snmp_val0.snmp_val_type = 0x4;strcpy(msg.snmp_val0.snmp_val_string,temp);char* retValue = NULL;struct timeval tv = 5, 0 ;int ret = send_request_msg_timeout(&msg, &ret_msg, &tv);if (ret = 0) printf(send_request_msg success!n); else printf(date no responsen);return -1;return 0;5:基于SNMP协议代理端的实现int main(int argc, char *argv)led_fd = open(/dev/my_led, O_RDWR, S_IRUSR | S_IWUSR);if(led_fd snmp_type) switch(tmp) Case 1: break;.Case n: break;Default: break;./*设置代理端的信息*/if(SNMP_VALUE_TYPE_SET_REQ = msg-snmp_type) switch(tmp) case 35:printf(35n);ioctl(led_fd, 0);/LED亮retValue = success;break;case 36:printf(36n);ioctl(led_fd, 1);/LED灭retValue = success;.附件:SNMP协议到这里,基于SNMP的查询管理的流程应该是清楚啦,可是对于SNMP的原理还不是很清楚,接着看看SNMP吧。这个图还是能够很好的反应SNMP协议的工作原理。一:SNMP报文的类型:SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。get-request操作:从代理进程处提取一个或多个参数值get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值set-request操作:设置代理进程的一个或多个参数值get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的,图2-1描述了SNMP的这5种报文操作。请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用端口162来接收trap报文。 二:SNMP数据报文的格式一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部trap首部、变量绑定。(1)公共SNMP首部版本:写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0共同体(community):共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。PDU类型:根据PDU的类型,填入04中的一个数字,其对应关系如表2-3所示意图。PDU类型名称0get-request1get-next-request2get-response3set-request4trap表2-3 PDU类型(2)get/set首部请求标识符(request ID):这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文差错状态(error status):由代理进程回答时填入05中的一个数字,见表2-3的描述 差错状态名字说明0noError一切正常1tooBig代理无法将回答装入到一个SNMP报文之中2noSuchName操作指明了一个不存在的变量3badValue一个set操作指明了一个无效值或无效语法4readOnly管理进程试图修改一个只读变量5genErr某些其他的差错表2-3 差错状态描述差错索引(error index):当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移(3)trap首部企业(enterprise):填入trap报文的网络设备的对象标识符。此对象标识符肯定是在图3的对象命名树上的enterprise结点1.3.6.1.4.1下面的一棵子树上。Trap类型:如表所示,当使用上述类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。trap类型名字说明0coldStart代理进行了初始化1warmStart代理进行了重新初始化2linkDown一个接口从工作状态变为故障状态3linkUp一个接口从故障状态变为工作状态4authenticationFailure从SNMP管理进程接收到具有一个无效共同体的报文5egpNeighborLoss一个EGP相邻路由器变为故障状态6enterpriseSpecific代理自定义的事件,需要用后面的“特定代码”来指明表2-4 Trap类型特定代码(specific-code):指明代理自定义的时间(若trap类型为6),否则为0。时间戳(timestamp):指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908表明在代理初始化后1908ms发生了该时间。(4)变量绑定(variable-bindings)指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。三:SNMP管理信息库MIB 管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。下图画的是管理信息库的一部分,它又称为对象命名(objectnamingtree)。 管理信息库的对象命名举例对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的饿一个(标号3)是被标识的组织。在其下面有 一个美国国防部(Department of Defense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子 树(图中带阴影的虚线方框),并在Internet结点旁边标注上1.3.6.1即可。 在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB- II,故结点名现改为mib-2,其标识为1.3.6.1.2.1,或Internet(1) .2.1。这种标识为对象标识符。袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂

温馨提示

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

评论

0/150

提交评论