我正在编写代码以接收SNMP v2c陷阱,将其存储在数据库中,然后将陷阱转发到另一个IP。我想确认是否可以使用与传入陷阱关联的varBinds变量,更新其内容,并将其用作填充传出陷阱的信息。是否可以仅使用pysnmp(而非snmpfwd)执行此操作?
我已经尝试使用varBinds变量来构建第二个陷阱,但是当脚本尝试发送第二个陷阱时,我总是收到错误消息。请在下面找到它。这是我用来接收和转发陷阱的代码的一部分。有人可以帮忙吗?谢谢!
from pysnmp.hlapi.asyncore import *
from pysnmp.entity import engine, config
from pysnmp.carrier.asyncore.dgram import udp
from pysnmp.entity.rfc3413 import ntfrcv
from pysnmp import debug
from pysnmp.smi import builder, view, compiler, rfc1902, error
def cbFun(snmpEngine, stateReference, contextEngineId, contextName, varBinds, cbCtx):
execContext = snmpEngine.observer.getExecutionContext('rfc3412.receiveMessage:request')
global mysqlEngine
trapoid=''
val=[]
for x in varBinds:
row = (rfc1902.ObjectType(rfc1902.ObjectIdentity(x[0]), x[1]).resolveWithMib(mibViewController)).prettyPrint().split(' = ')
val.append(row[1]) <-- values to be added to the DB
SendSNMPTrap('public','1.3.6.1.4.1.29172.22.2.0.4', varBinds)
return
def SendSNMPTrap(community,trapoid, varBinds):
global snmpEngine
global mibViewController
sendNotification(
snmpEngine,
CommunityData(community, mpModel=1),
UdpTransportTarget(('10.10.10.10', 162)),
ContextData(),
'trap',
NotificationType(
ObjectIdentity(trapoid)
).addVarBinds(varBinds)
)
“格式错误的对象ID%s,位于%s:%s”%(值,self.class.name,sys.exc_info()[1])
; pyasn1.error.PyAsn1Error:格式错误的对象ID [('1.3.6.1.4.1.29172.22.2.2.1.1',100),('1.3.6.1.4.1.29172.22.2.2.1.7','text_tt0'),( '1.3.6.1.4.1.29172.22.2.2.1.5','text_tt3'),('1.3.6.1.4.1.29172.5.2.0',100),('1.3.6.1.4.1.29172.22.2.2.1.9', ObjectName:'> ='上的'text_tt1'),('1.3.6.1.4.1.29172.22.2.2.1.10','text_tt2'),('1.3.6.1.4.1.29172.22.2.3',1)]在“元组”和“ int”的实例之间
最佳答案
应该可以重用varBinds
对象发送TRAP。我认为您应该在将varBinds
传递给addVarBinds时打开它们的包装。
那是:
sendNotification(
snmpEngine,
CommunityData(community, mpModel=1),
UdpTransportTarget(('10.10.10.10', 162)),
ContextData(),
'trap',
NotificationType(
ObjectIdentity(trapoid)
).addVarBinds(*varBinds)
)
关于python - pysnmp如何使用传入陷阱的varBinds内容转发新陷阱?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58600140/