将snmptrap命令转换为python(pysnmp或替代方法)

2024-09-28 21:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以从shell发送snmptrap(net snmp utils)命令,相当于-

snmptrap -v2c -c public myhostname.com '' .1.3.6.1.4.1.1234.7.0.1 .1.3.6.1.4.1.1234.7.1 s desktop 1.3.6.1.4.1.1234.7.2 s "TESTING" .1.3.6.1.4.1.1234.7.3 s CODE

我正试图通过Python3做同样的事。从脚本发送的陷阱消息由服务器/代理/管理器接收和处理。但是来自python的代码和输出(粘贴在下面)没有成功到达服务器。在

到目前为止,我一直在使用pysnmp

^{pr2}$

输出是

{02snmp()允许访问信息:2019:01: 2019-05-03 12:16:02884 pysnmp:状态信息:{'errorIndication':AccessAllowed()} 2019-05-03 12:16:02886 pysnmp:状态信息:{'errorIndication':AccessAllowed()} 2019-05-03 12:16:02891 pysnmp:状态信息:{'errorIndication':AccessAllowed()} 2019-05-03 12:16:02899 pysnmp:prepareOutgoingMessage:使用contextEngineId子规范,>;编码iso-885 9-1有效载荷[0x80004fb805c3c8cf48]>;contextName b'' 2019-05-03 12:16:02904 pysnmp:生成请求sg:消息:

 version=1
 community=public
 data=PDUs:
  snmpV2-trap=SNMPv2TrapPDU:
   request-id=10163951
   error-status=noError
   error-index=0
   variable-bindings=VarBindList:
    VarBind:
     name=1.3.6.1.2.1.1.3.0
     =_BindValue:
      value=ObjectSyntax:
       application-wide=ApplicationSyntax:
        timeticks-value=0

    VarBind:
     name=1.3.6.1.6.3.1.1.4.1.0
     =_BindValue:
      value=ObjectSyntax:
       simple=SimpleSyntax:
        objectID-value=1.3.6.1.6.3.1.1.5.2

    VarBind:
     name=1.3.6.1.6.3.1.1.4.3.0
     =_BindValue:
      value=ObjectSyntax:
       simple=SimpleSyntax:
        objectID-value=1.3.6.1.4.1.1234.7.0.1

    VarBind:
     name=1.3.6.1.4.1.1234.7.1
     =_BindValue:
      value=ObjectSyntax:
       simple=SimpleSyntax:
        string-value=desktop

    VarBind:
     name=1.3.6.1.4.1.1234.7.2
     =_BindValue:
      value=ObjectSyntax:
       simple=SimpleSyntax:
        string-value=TESTING

    VarBind:
     name=1.3.6.1.4.1.1234.7.3
     =_BindValue:
      value=ObjectSyntax:
       simple=SimpleSyntax:
        string-value=CODE

在向调试器添加“io”时,我在最后得到了这个消息-这是一条标准消息还是意味着消息已排队而没有离开?在

2019-05-06 04:55:42914 pysnmp:sendMessage:输出消息排队(164个八位字节) 00000:30 81 A1 02 01 01 04 06 70 75 62 6C 69 63 A7 81


Tags: name信息消息stringvalue状态simplepysnmp
2条回答

我不是pysnmp的专家,但问题似乎来自snmp设置。你为探员安排好了吗?请检查http://www.net-snmp.org/docs/man/snmpd.conf.html的版本、rwusers、groups等设置。 如果您需要替代品,请检查: https://github.com/pief/python-netsnmpagenthttps://github.com/hosthvo/pyagentx

netsnmpagent不能发送陷阱,但您可以自己添加该规范。在

我推荐pyagentx。使用主代理有点困难,但是您可以创建agentx并扩展它。但别忘了重新设置snmpd.conf公司一

您的消息尚未发送,因为主循环尚未启动。在

您可能应该导入pysnmp.hlapi,而不是{},因为前者最终默认为pysnmp.hlapi.asyncore.sync,后者只为一个查询在内部运行主循环。在

pysnmp.hlapi.asyncore模块是异步的。这意味着除了提交消息之外,还需要运行主循环(snmpEngine.transportDispatcher.runDispatcher())。您可以找到一个异步使用的example,但现在看来您只需要同步版本。在

相关问题 更多 >