SNMP是运行在网络管理程序和SNMP代理之间的通信协议,故而SNMP的开发也分为两部分。网络管理程序的开发和SNMP代理软件的开发。
SNMP代理运行在特定的网络设备中,由设备制造商负责开发。
对个人而言,主要需要负责网络管理程序的开发。
开发方法:采用WINDOWS环境下的SNMP++软件包。 //该软件包为封装的开源C++类库,相比依靠WinSNMP API直接进行编程要容易一些,不过智商是硬伤。T^T。
分析角度:客户机/服务器模式。
1)网络管理程序和SNMP代理既是服务器,也是客户机。
2)作为服务器,网络管理程序监听端口号162,接收SNMP代理发送的陷阱消息;
作为服务器,SNMP代理监听端口号161,接收网络管理软件发送的各种查询请求;
作为客户端,网络管理程序可以随时向SNMP代理发出查询请求;
作为客户端,SNMP代理可以随时向网络管理程序发出陷阱消息。
主要工作:
排除陷阱消息的处理,主要的开发工作分为以下两部分:
1)构造PDU,组成SNMP报文。
2)对发送(接收)的SNMP报文进行BER解码( 编码)。
###BER编码后的SNMP报文,交由UDP,同时指定服务器端(SNMP代理)的IP地址和端口号161.
###接收到返回的应答包后,对SNMP报文进行相应的解码处理,分析。
###SNMPV1的报文结构由SNMP版本号,共同体字符串和一个附加的PDU结构组成。BER编码处理的是整个报文。
###UDP数据的结构= = 源端口(随机)+目的端口161+数据长度+校验和+SNMP BER编码(数据部分)
###SNMP变量为运行期间SNMP代理所维护的被管理对象实例。
###网络管理程序通过查询SNMP变量的值,获得被管理网络设备的运行状态,通过设置SNMP变量的值,达到远程配置网络参数的目的。
###变量标示符就是列对象实例标示符,需要查询的SNMP变量标示符为对应列对象标示符+表索引。
###相应处理可以通过牺牲效率简化问题的方法,来促进问题的解决。
阻塞模式和非阻塞模式的网络请求:
SNMP++提供两种方式的网络请求:
*1 阻塞模式为一个请求发出后,程序等候回应包的到来,直至超时。
*2 非阻塞模式为请求发出后,控制返回继续执行,等待回应包的返回后,再做处理。
*3 非阻塞模式实现较为复杂,但应用灵活,在网络延时较大的情况下,效率更高,但一般情况下。管理工作站和代理处于同一局域网,阻塞模式相对易于实现。