1

現在、Python アプリケーションでトラップを受信する方法を実装しようとしています。私のデバイスは彼の snmpV2 トラップを私のマシンに直接送信します (他のソフトウェアでの動作をテスト済み) が、PySNMP はそれらを受信して​​いないようです。ドキュメントから直接サンプルコードを使用しています。私のデバイスは保護されておらず、パスワードや証明書は必要ありません。コミュニティは公開されています。

0.0.0.0、127.0.0.1、およびコンピューターの IP を直接使用するようにバインド ポートを変更しようとしました。まだ何もありません。

私が使用しているコードは次のとおりです。

def v2cv1CallBackFunc(snmpEngine, stateReference, contextEngineId, contextName,
                      varBinds, cbCtx):
    transportDomain, transportAddress = snmpEngine.msgAndPduDsp.getTransportInfo(stateReference)
    print(transportDomain, transportAddress)
    # Get an execution context...
    execContext = snmpEngine.observer.getExecutionContext(
        'rfc3412.receiveMessage:request'
    )

    # ... and use inner SNMP engine data to figure out peer address
    print('Notification from %s, ContextEngineId "%s", ContextName "%s"'
                          %('@'.join([str(x) for x in execContext['transportAddress']]),
                            contextEngineId.prettyPrint(), contextName.prettyPrint()))

    for name, val in varBinds:
        print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

def runSNMP():
    # Create SNMP engine with autogenernated engineID and pre-bound
    # to socket transport dispatcher
    snmpEngine = engine.SnmpEngine()

    # SNMPv1/2c setup
    # SecurityName <-> CommunityName mapping
    config.addV1System(snmpEngine, 'my-area', "public")

    # Specify security settings per SecurityName (SNMPv2c -> 1)
    config.addTargetParams(snmpEngine, 'my-creds', 'my-area', 'noAuthNoPriv', 1)

    # Transport setup
    # UDP over IPv4, first listening interface/port
    config.addSocketTransport(
        snmpEngine,
        udp.domainName + (1, ),
        udp.UdpSocketTransport().openServerMode(('127.0.0.1', 162))
    )

    # Register SNMP Application at the SNMP engine
    ntfrcv.NotificationReceiver(snmpEngine, v2cv1CallBackFunc)

    snmpEngine.transportDispatcher.jobStarted(1)  # this job would never finish

    # Run I/O dispatcher which would receive queries and send confirmations
    try:
        snmpEngine.transportDispatcher.runDispatcher()
    except:
        snmpEngine.transportDispatcher.closeDispatcher()
        raise```
4

0 に答える 0