如何为我的专有MIB生成Set命令

2024-04-19 02:28:52 发布

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

最后,我使用以下python脚本成功地为我的专有MIB生成了一个Get命令:

from pysnmp.entity.rfc3413.oneliner import cmdgen

errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().getCmd(
        cmdgen.CommunityData('10.0.1.134', 'admin', 0),
        cmdgen.UdpTransportTarget(('10.0.1.134', 161)),
        (1,3,6,1,4,1,4515,1,8,1,1,1,8,1295360,1295360)
 )

print (varBinds)

print (varBinds[0])

print (varBinds[0][0])

print (varBinds[0][1])

varBinds的4种不同印刷方式只是为了学习过程。 现在,我尝试模仿相同的脚本,同时将其转换为Set命令(没有成功)。有很多例子可以得到,但不适合。因此,我尝试了以下方法:

^{pr2}$

如您所见,我没有成功生成Set命令。我不知道怎么才能让它发挥作用。顺便说一下,我设置的OID是一个读写的整数(32位),有以下可能的值:up(1)、down(2)和standby(3)。在

为了成功地使用任何可能的值设置OID,我需要更改什么?在

我尝试过你建议的脚本,但失败了:

from pysnmp.hlapi import SnmpEngine, setCmd, CommunityData, UdpTransportTarget, ContextData, ObjectType, ObjectIdentity

from pysnmp.proto.api.v2c import Integer32
setCmd(SnmpEngine(),
       CommunityData('public', mpModel=0),
       UdpTransportTarget('10.0.1.134', 161),
       ContextData(),
       ObjectType(ObjectIdentity('1.3.6.1.4.1.4515.1.8.1.1.1.8.1295360.1295360'), Integer32(1)))

这是我收到的错误消息:

**回溯(最近一次呼叫): 文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\运输.py“,第56行,in\u resolveAddr套接字.IPPROTO\u UDP)[0][4][:2] 文件“C:\Program Files\Python35\lib\插座.py,第732行,在getaddrinfo中为res in_套接字.getaddrinfo(主机、端口、系列、类型、协议、标志):插座盖错误:[Errno 11004]getaddrinfo失败

在处理上述异常时,发生了另一个异常:

回溯(最近一次呼叫): 文件“”,第3行,输入 文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\运输.py“,第17行,ininit自身运输地址=self.\u resolveAddr(传输地址) 文件“C:\Program Files\Python35\lib\site packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\运输.py“,第58行,in\u resolveAddr raise错误.PySnmpError('IPv4/UDP传输地址%s错误:%s'''@'。join([str(x)for x in transportAddr]),系统执行信息()[1]))pysnmp.error.PySnmpError:错误的IPv4/UDP传输地址1@0@@0@@1@@1@3@4:[错误号11004]getaddrinfo失败**

我需要怎么做才能修复这个问题?在


Tags: 文件inpy地址lib错误filesprogram
1条回答
网友
1楼 · 发布于 2024-04-19 02:28:52

必须将OID值对包装到ObjectType对象中:

setCmd(SnmpEngine(),
       CommunityData('public', mpModel=0),
       UdpTransportTarget(('demo.snmplabs.com', 161)),
       ContextData(),
       ObjectType(ObjectIdentity('1.3.6.1.2.1.1.9.0'), Integer32(1)))

上面的代码并没有真正使用任何mib。如果您想以更人性化的方式操作,可以用MIB module+symbol替换OID,用label替换integer(如MIB中所述):

^{pr2}$

这是一个working example。在

相关问题 更多 >