我尝试使用 PySNMP 在 Python 中编写相同的命令。作为参考,我使用了文档:https://pysnmp.readthedocs.io/en/latest/examples/hlapi/v3arch/asyncore/sync/agent/ntforg/common-notifications.html 我的代码目前如下所示:
g = sendNotification(
SnmpEngine(),
CommunityData(community_string, mpModel=1),
UdpTransportTarget((host, 162)),
ContextData(),
'trap',
NotificationType(
ObjectIdentity('1.9.9.9.0'),
objects={
'1.9.9.9.1': 1,
'1.9.9.9.8': 'text'
}
我的脚本将发送消息,但不发送对象。我的 Wireshark 输出:
我还可以做什么来发送我的陷阱消息?我哪里做错了?
替代方案:如果我尝试将“额外”OID 写入函数
.addVarBinds()
,如下所示:
# Assemble MIB viewer
mibBuilder = builder.MibBuilder()
# raw mibs
compiler.addMibCompiler(mibBuilder, sources=['http://mibs.snmplabs.com/asn1/@mib@',
'/.'])
mibBuilder.loadModules('SNMPv2-MIB', 'SNMP-COMMUNITY-MIB', 'MY-MIB')
mibView = view.MibViewController(mibBuilder)
# send Trap
g = sendNotification(
SnmpEngine(),
CommunityData(community_string, mpModel=1),
UdpTransportTarget((host, 162)),
ContextData(),
'trap',
NotificationType(
ObjectIdentity('1.9.9.9.0').addVarBinds(
ObjectType(ObjectIdentity('1.9.9.9.1'), Integer(1))
ObjectType(ObjectIdentity('1.9.9.9.8'), OctetString("text"))
).resolveWithMib(mibView)
我收到错误并且陷阱未发送:
pysnmp: StatusInformation: {'errorIndication': NotInView('Requested OID is out of MIB view')}
但是解析单个 ObjectType 效果很好:
obj = ObjectType(ObjectIdentity('1.9.9.9.1'), Integer(1))
print(obj.resolveWithMib(mibView))
由于您只是想发送消息,所以不需要
.resolveWithMib(mibView)
。