pysnmp如何使用传入陷阱的varBinds内容转发新陷阱?

时间:2019-10-29 00:47:20

标签: python pysnmp

我正在编写代码以接收SNMP v2c陷阱,将其存储在DB中,然后将陷阱转发到另一个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)
    )

'%s处的格式错误的对象ID%s:%s'%(值,自身。名称,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)]在'tuple'和'int'的实例之间

1 个答案:

答案 0 :(得分:0)

应该可以重用varBinds对象来发送TRAP。我认为您应该将varBinds传递到addVarBinds时打开包装。

也就是说:

 sendNotification(
    snmpEngine,
    CommunityData(community, mpModel=1),   
    UdpTransportTarget(('10.10.10.10', 162)),
    ContextData(),
    'trap',
    NotificationType(
        ObjectIdentity(trapoid) 
    ).addVarBinds(*varBinds)
)