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

Python pysnmp如何使用传入陷阱的varBinds内容转发新陷阱?,python,pysnmp,Python,Pysnmp,我正在编写一个代码来接收SNMP v2c陷阱,将它们存储在数据库中,然后将陷阱转发到另一个IP。我想确认是否可以使用与传入陷阱关联的varBinds变量,更新其内容,并将其用作填充传出陷阱的信息。仅使用pysnmp(而不是snmpfwd)就可以做到这一点吗 我已经尝试使用varBinds变量来构建第二个陷阱,但是当脚本尝试发送第二个陷阱时,我总是会出错。请在下面找到。这是我用来接收和转发陷阱的代码的一部分。有人能帮忙吗?谢谢 from pysnmp.hlapi.asyncore import *

我正在编写一个代码来接收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)
    )
从pysnmp.hlapi.asyncore导入*
从pysnmp.entity导入引擎,配置
从pysnmp.carrier.asyncore.dgram导入udp
从pysnmp.entity.rfc3413导入ntfrcv
从pysnmp导入调试
从pysnmp.smi导入生成器,查看,编译器,rfc1902,错误
def cbFun(snmpEngine、stateference、contextEngineId、contextName、varBinds、cbCtx):
execContext=snmpEngine.observer.getExecutionContext('rfc3412.receiveMessage:request')
全局mysqlEngine
trapoid=''
val=[]
对于varBinds中的x:
行=(rfc1902.ObjectType(rfc1902.ObjectIdentity(x[0]),x[1]).resolveWithMib(mibViewController)).prettyPrint().split('='))

val.append(行[1])应该可以重用
varBinds
对象来发送陷阱。我认为在将它们传递给用户时,您应该解包
varBinds

即:

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

应该可以重用
varBinds
对象来发送陷阱。我认为在将它们传递给用户时,您应该解包
varBinds

即:

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

你好非常感谢,我将测试它并更新线程。谢谢你好非常感谢,我将测试它并更新线程。谢谢