如何为我的专有 MIB 生成设置命令
How do I generate a Set Command to my proprietary MIB
我终于成功地使用以下 python 脚本为我的专有 MIB 生成了获取命令:
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 Command 时模仿相同的脚本(但没有成功)。有很多例子可以得到但没有安装。所以,我尝试了以下方法:
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 socket.IPPROTO_UDP)[0][4][:2] 中
文件 "C:\Program Files\Python35\lib\socket.py",第 732 行,在 _socket.getaddrinfo(主机、端口、系列、类型、原型、标志)中的 getaddrinfo 中:socket.gaierror:[Errno 11004] getaddrinfo 失败
在处理上述异常的过程中,又发生了异常:
回溯(最近调用最后):
文件“”,第 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 中 raise error.PySnmpError('Bad IPv4/UDP transport address %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。如果你想以更人性化的方式进行操作,你可以用MIB模块+符号替换OID,用标签替换整数(如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 生成了获取命令:
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 Command 时模仿相同的脚本(但没有成功)。有很多例子可以得到但没有安装。所以,我尝试了以下方法:
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 socket.IPPROTO_UDP)[0][4][:2] 中 文件 "C:\Program Files\Python35\lib\socket.py",第 732 行,在 _socket.getaddrinfo(主机、端口、系列、类型、原型、标志)中的 getaddrinfo 中:socket.gaierror:[Errno 11004] getaddrinfo 失败
在处理上述异常的过程中,又发生了异常:
回溯(最近调用最后): 文件“”,第 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 中 raise error.PySnmpError('Bad IPv4/UDP transport address %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。如果你想以更人性化的方式进行操作,你可以用MIB模块+符号替换OID,用标签替换整数(如MIB中所述):
setCmd(SnmpEngine(),
CommunityData('public', mpModel=0),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
ObjectType(ObjectIdentity('MY-CUSTOM-MIB', 'myCustomVariable', 0), 'up'))
这是一个working example。