当前位置: 首页 > 知识库问答 >
问题:

Python SNMP陷阱接收器

蒋斯伯
2023-03-14

我在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\x01k0\x17\x06\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()

共有1个答案

詹杰
2023-03-14

您的发送代码正确地使用一个库来为您进行所有的编码/解码。

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

正确的做法是让SNMP库为您解码,并提供一个很好的逻辑值来表示您收到的内容。PySNMP已经有了这个设施。这里有一个例子。

 类似资料:
  • 我想接收snmp陷阱,我在snmp4j上获得了它,但现在我正在使用westhawk snmp堆栈库来实现陷阱接收器模块。我使用这个库示例来接收陷阱,但这段代码以rawPdu的形式接收陷阱,当我编辑代码时,我应该怎么做?这是我的代码:

  • while (<STDIN>) 一定要小心这点。如果你不知怎么回事地得到了假值(如:空行),你的文件可能 停止处理了。假如你在处理文件读取(除非修改了 $/),这种事一般不会发生, 但却可能发生。 你更喜欢这样运行: while (readdir(DIR)) { 假设你有文件名为 0 的话,那么程序将停止,且不会继续处理文件。 更合适的 while 循环看起来像这样: while ( defin

  • 如何使用C或C和net snmp模块接收陷阱。我需要示例代码,但示例位于http://www.net-snmp.org/使用系统调用,但不要使用API方法。

  • 通常,Python 旨在成为一门简洁一致的语言,避免发生意外。然而,有些情况可能会给新手们造成困惑。 在这些情况中,有一些虽是有意为之,但还是有潜在风险。还有一些则可以说是语言设计缺陷了。总之,下面列出的这些情况都是些乍一看很不好理解的行为,不过一旦您了解了这些奇怪行为背后的机理,也就基本上能理解了。 可变默认参数 似乎每个 Python 新手都会感到惊讶的一点是 Python 在函数定义中对待可

  • 问题内容: 我需要将基于GCC 4.7的libstdc 的,基于Ubuntu 12.10构建的C 应用程序部署到运行Ubuntu 10.04的系统,该系统随附了相当老的libstdc ++版本。 目前,我正在按照此博客文章的建议进行编译:静态链接libstdc ++ 。作者警告不要在静态编译libstdc 时使用任何动态加载的C 代码,这是我尚未检查过的事情。到目前为止,一切似乎都进展顺利:我可以

  • 在绝大多数情况下, React都是清晰直观的. 但是也不乏有一些小陷阱, 不注意的话有时候也会给你”意外的惊喜”. 下面我们就来介绍一下这些小陷阱 参考资料 React Gotchas Top 5 React Gotchas