2

我在 Python3 中收到了一个 SNMP 陷阱消息,并且我得到了一个十六进制数。

如何将其转换为字符串以便我可以看到它?

接收数据(十六进制)

b'0E\x02\x01\x01\x04\x06404040\xa78\x02\x04\x00\xf6\x17~\x02\x01\x00\x02\x01\x000*0\x0f\x06\x08+\x06\x01 \x02\x01\x01\x03\x00C\x03\x01k+0\x17\x06\n+\x06\x01\x06\x03\x01\x01\x04\x01\x00\x06\t+\x06\x01\x06 \x03\x01\x01\x05\x01'

这是我的 SNMP 陷阱接收器代码

import socket
import sys

port = 162
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", port))
while 1:
        data, addr = s.recvfrom(4048)
        print(data)

这是我的 SNMP 陷阱发件人代码

from pysnmp.hlapi.asyncore import *

snmpEngine = SnmpEngine()
sendNotification(
    snmpEngine,
    CommunityData('404040'),
    UdpTransportTarget(('192.168.0.160', 162)),
    ContextData(),
    'trap',
    NotificationType(ObjectIdentity('SNMPv2-MIB', 'coldStart')),
 )

snmpEngine.transportDispatcher.runDispatcher()
4

1 回答 1

4

您的发送代码正确地使用库为您完成所有编码/解码。

您的接收代码没有。即使您将二进制数据重新解释为字符串,您也无法理解它。它是一个 SNMP PDU,其中包含您必须提取和解析的大量信息。

正确的做法是获取一个 SNMP 库来为您解码它并提供一个很好的逻辑值来表示您收到的内容。PySNMP 已经有了这个功能。这是一个例子。

于 2018-12-10T12:08:20.747 回答