1""" 2SNMP MIB browser 3++++++++++++++++ 4 5This script explains how Python application (typically SNMP Manager) 6could load SNMP MIB modules into memory and introspect Managed Objects 7defined in MIB. 8 9"""# 10from pysnmp.smi import builder, view, compiler, error 11 12# Create MIB loader/builder 13mibBuilder = builder.MibBuilder() 14 15# Optionally attach PySMI MIB compiler (if installed) 16#print('Attaching MIB compiler...'), 17#compiler.addMibCompiler(mibBuilder, sources=['/usr/share/snmp/mibs']) 18#print('done') 19 20# Optionally set an alternative path to compiled MIBs 21print('Setting MIB sources...') 22mibBuilder.addMibSources(builder.DirMibSource('/opt/pysnmp_mibs')) 23print(mibBuilder.getMibSources()) 24print('done') 25 26print('Loading MIB modules...'), 27mibBuilder.loadModules( 28 'SNMPv2-MIB', 'SNMP-FRAMEWORK-MIB', 'SNMP-COMMUNITY-MIB', 'IP-MIB' 29 ) 30print('done') 31 32print('Indexing MIB objects...'), 33mibView = view.MibViewController(mibBuilder) 34print('done') 35 36print('MIB symbol name lookup by OID: '), 37oid, label, suffix = mibView.getNodeName((1,3,6,1,2,1,1,1)) 38print(oid, label, suffix) 39 40print('MIB symbol name lookup by label: '), 41oid, label, suffix = mibView.getNodeName((1,3,6,1,2,'mib-2',1,'sysDescr')) 42print(oid, label, suffix) 43 44print('MIB symbol name lookup by symbol description: '), 45oid, label, suffix = mibView.getNodeName(('sysDescr',)) 46oid, label, suffix = mibView.getNodeName(('snmpEngineID',), 'SNMP-FRAMEWORK-MIB') 47print(oid, label, suffix) 48 49print('MIB object value pretty print: '), 50mibNode, = mibBuilder.importSymbols('SNMP-FRAMEWORK-MIB', 'snmpEngineID') 51print(mibNode.syntax.prettyPrint()) 52 53print('MIB symbol location lookup by name: '), 54modName, symName, suffix = mibView.getNodeLocation(('snmpCommunityEntry',)) 55print(symName, modName) 56 57print('MIB node lookup by location: '), 58rowNode, = mibBuilder.importSymbols(modName, symName) 59print(rowNode) 60 61print('Conceptual table index value to oid conversion: '), 62oid = rowNode.getInstIdFromIndices('router') 63print(oid) 64print('Conceptual table index oid to value conversion: '), 65print(rowNode.getIndicesFromInstId(oid)) 66 67print('MIB tree traversal') 68oid, label, suffix = mibView.getFirstNodeName() 69while 1: 70 try: 71 modName, nodeDesc, suffix = mibView.getNodeLocation(oid) 72 print('%s::%s == %s' % (modName, nodeDesc, oid)) 73 oid, label, suffix = mibView.getNextNodeName(oid) 74 except error.NoSuchObjectError: 75 break 76 77print('Modules traversal') 78modName = mibView.getFirstModuleName() 79while 1: 80 if modName: print(modName) 81 try: 82 modName = mibView.getNextModuleName(modName) 83 except error.SmiError: 84 break 85