我下面的代码不工作,因为我想获得使用Net-Snmp库的节点的描述。
#include "net-snmp/net-snmp-config.h" #include "net-snmp/net-snmp-includes.h" void print_s(struct tree *); int main(int argc, char ** argv) { char buff[100]; struct tree *node=NULL; init_mib(); node=read_all_mibs(); if( node == NULL ) { exit(2); } print_s(node); } void print_s(struct tree *tree) { struct tree *tp; for (tp = tree->child_list; tp; tp = tp->next_peer) { printf("%s:%s\n",tp->label,tp->description); } for (tp = tree->child_list; tp; tp = tp->next_peer) { if (tp->child_list) print_s(tp); } } o/p- org:(null) dod:(null) internet:(null) snmpV2:(null) security:(null) private:(null) experimental:(null) mgmt:(null) directory:(null) snmpModules:(null) snmpProxys:(null) snmpDomains:(null) snmpMIB:(null) snmpFrameworkMIB:(null) ......... ........
我得到所有节点的空值,
请告诉我为什么我无法获取节点的描述,因为它是可用的。当我使用命令行选项如下
snmptranslate -On -Td 1.3.6.1.6.3.10 Result ----------- .1.3.6.1.6.3.10 snmpFrameworkMIB MODULE-IDENTITY -- FROM SNMP-FRAMEWORK-MIB DESCRIPTION "The SNMP Management Architecture MIB Copyright (C) The Internet Society (2002). This version of this MIB module is part of RFC 3411; see the RFC itself for full legal notices. " ::= { iso(1) org(3) dod(6) internet(1) snmpV2(6) snmpModules(3) 10 }
1.3.6.1.6.3.10
是snmpFrameworkMIB
的oid
,但是你可以在我的程序的节点上面看到它的description
为null。
任何人都可以知道这里有什么问题。
默认情况下, net-snmp
MIB
分析器不会打开DESCRIPTION字符串存储,因为它占用更多内存。
打印说明电话:
snmp_set_save_descriptions(1);
在调用init_snmp()
强制保存DESCRIPTION子句之前。
函数void snmp_set_save_descriptions(int);
在include/net-snmp/mib_api.h
声明,并在snmplib/ucd_compat.c
定义。
定义 :
void snmp_set_save_descriptions(int save) { netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_SAVE_MIB_DESCRS, save); }
编辑:
调用snmp_set_save_descriptions(1);
init_snmp()
之前init_snmp()
调用netsnmp_init_mib()
所以不需要明确调用netsnmp_init_mib()
如果有人调用init_snmp()