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