我是SNMP新手,我正在尝试在云中创建SNMP代理,它将使用上下文名称来区分设备。我在代理端使用pysnmp。我也遵循的样本程序中提供的 http://snmplabs.com/pysnmp/examples/contents.html
现在我想知道如何在代理端添加register multiple context name,并在这个context name下注册MIB。都使用相同的非默认MIB。你知道吗
我尝试了所有的样本代码www.snmpalabs.com,但当我使用上下文名称时,会得到超时或MIB结束。你知道吗
def __init__(self, mibObjects):
snmpEngine = engine.SnmpEngine()
config.addTransport(
self._snmpEngine, udp.domainName,
udp.UdpTransport().openServerMode(('127.0.0.1', 161)))
config.addV3User(self._snmpEngine, 'User', config.usmHMACMD5AuthProtocol, 'PassCode')
config.addVacmUser(self._snmpEngine, 3, 'User', 'authNoPriv', (1, 3, 6, 1, 4, 1, 44555), (1, 3, 6, 1, 4, 1, 44555))
snmpContext = context.SnmpContext(snmpEngine)
responder(snmpEngine,snmpContext)
mibBuilder = snmpContext.getMibInstrum().getMibBuilder()
loadmib(mibBuilder)
snmpContext.registerContextName(
v2c.OctetString('MyContextName'),
instrum.MibInstrumController(mibBuilder)
)
MibScalarInstance, = mibBuilder.importSymbols('SNMPv2-SMI', 'MibScalarInstance')
# export our custom mib
for mibObject in mibObjects:
nextVar, = mibBuilder.importSymbols(mibObject.mibName,
mibObject.objectType)
instance = createVariable(MibScalarInstance,
mibObject.valueFunc,
mibObject.objectType,
nextVar.name, (0,),
nextVar.syntax)
instanceDict = {str(nextVar.name) + "Instance":instance}
mibBuilder.exportSymbols(mibObject.mibName,
**instanceDict)
我只粘贴了最少量的代码。请询问是否需要更多。这不是正确的方法,那是什么?这方面有什么好的文档或帮助吗?你知道吗
本质上,您应该有一个
SnmpContext
对象和多个MIB树,每个MIB树都以不同的名称注册到SnmpContext
。你知道吗然后您应该能够像这样查询每个MIB树:
因为mib树是空的,所以很可能只得到mib的末尾。你知道吗
这是一个很有希望操作的example script。你知道吗
除了从头开始实现您自己的SNMP代理之外,您还可以考虑试用基于相同技术的SNMP Command Responder工具,但要使它更容易(希望如此)。你知道吗
相关问题 更多 >
编程相关推荐