答案 0 :(得分:0)
你是对的,现有的mibdump.py
工具主要是为管理员端MIB编译而设计的。但是,编译的MIB仍然有用,甚至有时对代理实现至关重要。
对于简单标量,您可以使用MibScalar
类批量替换MibScalarInstance
类。并向其OID添加额外的尾随.0
。例如this line:
sysDescr = MibScalar((1, 3, 6, 1, 2, 1, 1, 1), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
会像这样改变:
sysDescr = MibScalarInstance((1, 3, 6, 1, 2, 1, 1, 1, 0), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
对于SNMP表格来说,它更加琐碎,因为可能有几种情况。如果它是一个永远不会改变其大小的静态表,那么你基本上可以用MibTableColumn
替换MibScalarInstance
并附加OID的索引部分。例如this line:
sysORID = MibTableColumn((1, 3, 6, 1, 2, 1, 1, 9, 1, 2), ObjectIdentifier()).setMaxAccess("readonly")
看起来像这样(注意索引12345):
sysORID = MibScalarInstance((1, 3, 6, 1, 2, 1, 1, 9, 1, 2, 12345), ObjectIdentifier()).setMaxAccess("readonly")
其他MibTable*
类可以从MIB.py中删除。
对于因SNMP代理或SNMP管理器修改它们而改变其形状的动态表,您可能需要保留所有MibTable*
类并扩展/自定义MibTableColumn类以使其实际管理您的后端资源以响应SNMP调用。
希望相关的example。