SNMP目的:提供了统一的、跨平台的设备管理;
SNMP管理的设备包括:主机,路由器、交换机、打印机、HUB等
基于TCP/IP的网络管理包含3个组成部分:
SNMP协议: manager和管理代理之间的通信协议、大多采用UDP
MIB:即管理信息库,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。
SMI:即管理信息结构,对MIB进行规范的标准,比如定义MIB中的变量类型、格式等;功能和作用:给对象命名;定义可在对象中存储的数据类型;给出如何对在网络上传输的数据进行编码的方法
1.SNMP协议
SNMP的五种消息类型
SNMPv1中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap。
1) get-request操作:从代理进程处提取一个或多个参数值。
2) get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值;
3) set-request操作:设置代理进程的一个或多个参数值。
4) get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
5) trap 操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
SNMPv2增加了报文格式:
1).GETBULK REQUEST - a faster iterator used to retrieve sequences of management information.
2).INFORM - similar to a TRAP but the receiver must respond with an acknowledgement RESPONSE message.
3).REPORT - definable by an administrative framework.
SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next-Request用于和Get-Request组合起来查询特定的表对象中的列元素。SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。SNMP代理使用Trap向SNMP管理站主要发送报告消息,一般用于描述某一事件的发生,比如接口故障(网线断开),重启动等。
SNMPv2报文格式如下:
2.MIB
包含管理设备及其管理对象的树型结构的信息库。每个SNMP agent都有自己的MIB;管理站有一个全局MIB。MIB对象被划分为若干个组,如,system,interface,address、address translation,IP,ICMP,TCP,UDP,EGP 等。
当对MIB变量进行操作,如查询和设置变量的值时,必须对M I B的每个变量进行标识。每个被管对象都必须有一个全局对象标识符;所有对象标识符在全局上构成一棵对象标识符树;所有SNMP被管对象的标识符以1.3.6.1.2.1开始,即iso.org.dod.internet.mgmt.mib。如下实例:
注:只有叶子结点是可操作的
3.SMI
SMI使用了ASN.1的基本定义,并且新增了几个ASN.1中没有的类型。SMI包括两个简单与结构两种数据类型,其中,简单数据类型7种(前3种为ANS.1定义,后4种为新增),结构数据类型2种。简单数据类型有整形,串,IP地址,计数类型,等;结构化类型是简单类型的组合,一种以类似struct形式的不同简单类型组合,称为sequence;一类是sequence of,类似array形式,相同类型组合。编码的时候采用BER编码法: 每一个数据块被编码成三元组(标记、长度、值)。
1993年发布了SNMPv2,扩充:
1) 在SNMPv2中定义了一个新的分组类型get-bulk-request,它高效率地从代理进程读取大块数据。
2) 另的一个新的分组类型是inform-request,它使一个管理进程可以向另一个管理进程发送信息。
3) 定义了两个新的MIB,它们是:SNMPv2 MIB和SNMPv2-M2M MIB(管理进程到管理进程的MIB)。
4) SNMPv2的安全性比SNMPv1大有提高。在SNMPv1中,从管理进程到代理进程的共同体名称是以明文方式传送的。而SNMPv2可以提供鉴别和加密。
RFC 2271定义的SNMPv3体系结构,体现了模块化的设计思想,可以简单地实现功能的增加和修改。其特点:
1) 适应性强:适用于多种操作环境,既可以管理最简单的网络,实现基本的管理功能,又能够提供强大的网络管理功能,满足复杂网络的管理需求
2) 扩充性好:可以根据需要增加模块
3) 安全性好:具有多种安全处理模块
与SNMPv1和SNMPv2相比,SNMPv3增加了三个新的安全机制:身份验证,加密和访问控制。
除SNMP外,OSI还定义了一种网络管理协议CMIP。其命运与OSI模型一样。
http://www.anheng.com.cn/news/2926.html
http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol
http://www.cnpaf.net/class/SNMP/
http://net-snmp.cn/
写完了浏览了一下四年前(严格来说是三年半)写的超简单的SNMP报文封装与解析程序,发现自己在c语言功底还是不错,竟然到处都在用指针,许多地方还用了位运算,有点意外。而印象中那时候对指针的认识并非特别的深刻,而且还存在许多误区。现在觉得自己对c语言认识还比较深刻,也许,再过段时间,又会发现现在的认识是比较肤浅的了。希望这样子~~是个好事情,说明认识在上升,自己在进步。
感觉以前的这些代码有几个地方做的非常不好:
1.抽象:完全没有抽象的;像通过标记,长度和数据值生成网络传输的数据项时,其过程都是一致的,可以放到一个函数里面去,而我写了多个极为类似的函数来完成;造成重复代码与重复流程;
2.可读性:有一些注意了,但还不是很好;
3.代码风格:感觉有点乱;而且一个函数写的很长;
4.出错处理:啊。。好像没看到出错处理;
char *oid_construct(char *buffer,int length,int *value)
{
char *curptr=(char *)buffer;
(*curptr)=(char)OBJECTIDENTIFIER;
curptr++;
(*curptr)=(char)length;
curptr++;
for(int i=0;i<length;i++)
(*(curptr+i))=(char)*(value+i);
return curptr;
}
void decode_PDU(char *pdu)
{
char *curptr=pdu;
int pdu_len;
curptr++;//第一字节:sequence,略过
if((*curptr&0x80)!=0) //length
{
//长度超过一个字节,目前暂无法处理
printf("Infomation:Now cannot deal with the PDU that length field over 1 Byte.\n\n");
exit(0);
}
else
pdu_len=*curptr;
printf("PDU Length:%d.\n",pdu_len);
curptr+=2;
int ver=*curptr;
printf("Version:%d\n",ver); //version information
curptr+=3;
int community_len=*curptr++;
printf("Community:");
for(int i=0;i<community_len;i++)
printf("%c",*curptr++); //community
char pdu_type=*curptr;
printf("\nPDU Type:SNMP Response packet.\n");
curptr+=2; //ignore the length after the type information
curptr++;
int id_len=*curptr++;
printf("ID:");
for(int j=0;j<id_len;j++)
printf("%x",*curptr++); //id
curptr++;
int error_status_len=*curptr++;
printf("\nError status:");
for(int k=0;k<error_status_len;k++)
printf("%x",*curptr++); //error status
curptr++;
int error_index_len=*curptr++;
printf("\nError index:");
for(int l=0;l<error_index_len;l++)
printf("%x",*curptr++); //error index
curptr++;
int var_bindings_len=*curptr++; //variable bindings headers
curptr++; //variable bindings length
curptr+=2;
int name_len=*curptr++; //name length
printf("\nName:1.3"); //name
id
curptr++;
for(int m=1;m<name_len;m++)
{
printf(".%x",*curptr++);
}
curptr++;
int value_len=*curptr++; //value length
printf("\nValue:");
for(int n=0;n<value_len;n++)
{
printf("%c",*curptr++);
}
printf("\nPacket has been parsed completely.");
}
转自:http://kofsky.iteye.com/blog/283235
分享到:
相关推荐
它提供了多种工具和服务,如snmpget、snmpwalk、snmptrap等,以及一个SNMP代理snmpd,用于监控网络设备和主机的状态。以下是从给定文件中提取的关键知识点: ### 一、NET-SNMP安装与配置 #### 安装过程 1. **解压...
- **架构**:SNMP由管理站(Manager)、代理(Agent)和管理信息库(MIB)组成,管理站通过SNMP协议向代理发送请求,获取或设置MIB对象的值。 2. SNMP版本: - **SNMPv1**:基础版本,提供基本的管理功能,但安全...
这个"snmp.rar_SNMP_snmp管理"压缩包显然包含了与SNMP管理和应用相关的资源,适合初学者学习和理解SNMP的工作原理及其实现。 首先,我们看到的文件名有WSnmpUtil.Cpp和Helper.Cpp,这两个文件很可能是C++语言编写的...
在这个“SNMP agent.rar”压缩包中,我们主要关注的是C语言实现的SNMP代理(SNMP Agent)以及MIB(Management Information Base)实例,特别是与SNMP表格(snmp table)相关的开发。 首先,SNMP代理是SNMP协议的...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。OID(Object Identifier,对象...
SNMP(Simple Network Management Protocol)是一种广泛用于网络设备管理的标准协议,它允许管理员远程监控和配置网络设备。SNMP Exporter则是Prometheus监控系统中的一个工具,专门用于收集SNMP设备的指标数据,...
SNMP4J是一个Java实现的简单网络管理协议(SNMP)的开源库,它提供了全面的SNMPv1、SNMPv2c和SNMPv3支持,包括代理(Agent)和管理站(Manager)的功能。这个jar包包含了SNMP4J的核心组件以及SNMP4J-Agent扩展,用于...
SNMP(简单网络管理协议)是网络管理员用来监控和管理网络设备的标准协议。SNMP TRAP是一种机制,网络设备在发生特定事件时会主动发送通知到预设的管理站,这些通知被称为TRAP消息。"SNMP_TRAP监听工具"正是用于接收...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的协议,它允许管理员远程监控和管理网络设备。VB6(Visual Basic 6)是微软开发的一种可视化的编程环境,常用于创建...
根据提供的文件信息,我们可以从中提炼出与“485串口转TCP”相关的知识点。以下是对这些知识点的详细解析: ### 一、485串口(RS-485)简介 #### 1. 定义 RS-485是一种支持平衡传输的串行接口标准,广泛应用于工业...
转到“SNMP服务”的“安全”选项卡,添加新的社区字符串,如“public”(读权限)和“private”(读写权限)。确保设置的字符串足够安全,避免被未经授权的访问。 4. **配置MIB**: MIB文件包含设备的管理对象信息。...
SNMP代理负责接收和响应来自网络的SNMP请求,客户端工具则用于向网络中的设备发送SNMP请求,获取或设置设备状态。Net-SNMP还支持SNMPv1、SNMPv2c和SNMPv3,提供了不同级别的安全性和功能。 在实际应用中,Net-SNMP...
4. **命令行工具**:如`snmpwalk`, `snmpget`, `snmpset`等,用于测试和调试SNMP通信。 5. **MIB编译器(mib2c)**:将管理信息库(MIB)文件转换为源代码,供代理或客户端使用。 6. **文档**:详尽的用户指南、开发...
使用 mib2c 工具添加私有 SNMP 的 OID 使用 mib2c 工具可以添加私有 SNMP 的 OID,这是实现 SNMP 协议的关键步骤。SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的协议,它可以帮助网络...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。在这个"snmp_demo.zip"压缩包中,包含...
【嵌入式SNMP】是网络管理中的一种技术,它涉及到使用开源的UCD-SNMP 4.2.1软件包来开发自定义的SNMP代理(Agent)。SNMP(简单网络管理协议)是用来监控和管理网络设备的标准协议,包括SNMPv1、SNMPv2c和SNMPv3三个...
SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,它允许网络管理员远程监控和配置网络设备。Snmp4j是一个Java实现的SNMP协议库,它为开发SNMP应用提供了全面的支持,包括代理(Agent)和管理站...
SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,它允许管理员远程监控和配置网络设备。在Linux系统中,如CentOS,SNMP通常通过RPM(Red Hat Package Manager)包进行安装。本压缩包“snmp安装包....
CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)和SNMP(Simple Network Management Protocol,简单网络管理协议)是两种在不同场景下用于网络通信和管理的技术。理解它们之间的转换...