gpt4 book ai didi

python - 如何为我的专有 MIB 生成设置命令

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:44 27 4
gpt4 key购买 nike

我终于成功地使用以下 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 种不同的方式打印只是为了学习过程。现在我尝试模仿相同的脚本,同时将其转换为设置命令(没有任何成功)。有很多例子可以获取但不适合。因此,我尝试了以下方法:

from pysnmp.entity.rfc3413.oneliner import cmdgen

errorIndication, errorStatus, errorIndex, rspVarBinds = cmdgen.CommandGenerator().setCmd(
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),
(1),
)

如您所见,我没有成功生成设置命令。我不知道如何让它发挥作用。顺便说一句,我设置的 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\transport.py”,第 56 行,在 _resolveAddr 套接字中。IPPROTO_UDP)[0 ][4][:2]文件“C:\Program Files\Python35\lib\socket.py”,第 732 行,在 _socket.getaddrinfo(host, port, family, type, proto, flags) 中的 getaddrinfo 中:socket.gaierror: [Errno 11004]获取地址信息失败

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):文件“”,第 3 行,位于文件“C:\Program Files\Python35\lib\site-packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\transport.py”,第 17 行,init self .transportAddr = self._resolveAddr(transportAddr)文件“C:\Program Files\Python35\lib\site-packages\pysnmp-4.3.2-py3.5.egg\pysnmp\hlapi\asyncore\transport.py”,第 58 行,在 _resolveAddr 中引发错误。PySnmpError('错误的 IPv4/UDP 传输地址 %s: %s' % ('@'.join([str(x) for x in TransportAddr]), sys.exc_info()[1])) pysnmp.error.PySnmpError: 错误的 IPv4/UDP传输地址1@0@.@0@.@1@.@1@3@4: [Errno 11004] getaddrinfo失败**

我需要做什么才能解决这个问题?

最佳答案

您必须将 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。如果你想以更人性化的方式进行操作,可以将OID替换为MIB模块+符号和带有标签的整数(如MIB中所述):

setCmd(SnmpEngine(),
CommunityData('public', mpModel=0),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
ObjectType(ObjectIdentity('MY-CUSTOM-MIB', 'myCustomVariable', 0), 'up'))

这是一个working example .

关于python - 如何为我的专有 MIB 生成设置命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42398808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com