SNMP简单网络管理协议的介绍以及API使用
一、协议原理要点
SNMP,简单网络管理协议,是TCP/IP协议簇的一个应用层协议。已经有3个版本,SNMPv1、SNMPv2、SNMPv3。
SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap ,这5种消息类型在管理进程和代理进程之间交互(常见的例子如电脑主机上的管理进程与打印机上的代理进程之间的通信),示意如下图:
消息报文封装如下:
二、API使用
1、SnmpMgrOpen(),打开获取会话句柄。
LPSNMP_MGR_SESSION
SNMP_FUNC_TYPE
SnmpMgrOpen(
__in_opt LPSTR lpAgentAddress, // Name/address of target agent
__in_opt LPSTR lpAgentCommunity, // Community for target agent
IN INT nTimeOut, // Comm time-out in milliseconds
IN INT nRetries // Comm time-out/retry count
);
2、SnmpMgrClose();关闭句柄。
BOOL
SNMP_FUNC_TYPE
SnmpMgrClose(
IN LPSNMP_MGR_SESSION session // SNMP session pointer
);
3、SnmpMgrStrToOid()、SnmpMgrOidToStr();转换对象标识符字符串格式(如".1.3.6.1.4.1.641.2.1.2.1.4.1")到内部对象标识符、内部对象标识符到字符串。
BOOL
SNMP_FUNC_TYPE
SnmpMgrStrToOid(
__in_opt LPSTR string, // OID string to be converted
OUT AsnObjectIdentifier *oid // OID internal representation
);
BOOL
SNMP_FUNC_TYPE
SnmpMgrOidToStr(
IN AsnObjectIdentifier *oid, // OID to be converted
__deref_opt_out LPSTR *string // OID string representation
);
4、SNMP_malloc() 为SNMP对象分配内存。
5、SnmpMgrRequest(); get、set请求发送。
SNMPAPI
SNMP_FUNC_TYPE
SnmpMgrRequest(
IN LPSNMP_MGR_SESSION session, // SNMP session pointer
IN BYTE requestType, // Get, GetNext, or Set
IN OUT RFC1157VarBindList *variableBindings, // Varible bindings
OUT AsnInteger *errorStatus, // Result error status
OUT AsnInteger *errorIndex // Result error index
);
6、SnmpMgrTrapListen()、SnmpMgrGetTrap() 、SnmpMgrGetTrapEx()监听、获取trap消息