【发布时间】:2018-05-19 02:15:55
【问题描述】:
我需要使用 Python 设置一些 OID 参数。 我使用 pysnmp 库制作了这个简单的脚本。它正确读取 OID,但是当我尝试设置一个时,我收到消息“此 OID 当前不存在此类对象”。 可以帮我?提前谢谢你。
from pysnmp.hlapi import *
print "Get OID"
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget((hostIP, 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.6.0')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.9.1.2.1')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.9.1.3.1')))
)
for varBind in varBinds:
print varBind
print "Set OID"
errorIndication, errorStatus, errorIndex, varBinds = next(
setCmd(SnmpEngine(),
CommunityData('public', mpModel=0),
UdpTransportTarget((hostIP, 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.9.1.3.1'),
OctetString('new value')))
)
for varBind in varBinds:
print varBind
我使用 MIB 浏览器(CommunityData='private' 进行设置)并且能够为该 snmp v2 设备(Selta ONU)设置特定的 OID,提供特定 OID 中的凭据。
这是设置的顺序:
1.3.6.1.4.1.10060.1.6.10.4.1.1.0 = "用户名"
1.3.6.1.4.1.10060.1.6.10.4.1.2.0 = "密码"
1.3.6.1.4.1.10060.1.6.10.4.2.0=1(会话状态 = 开始)
会话开始后我设置参数
1.3.6.1.4.1.10060.1.6.6.3.29.1.4.1 = "17a_RTX"
1.3.6.1.4.1.10060.1.6.10.4.2.0=3(会话状态 = COMMIT)
所以存储了新值。 经过这次成功的经验,我这样修改了Python脚本:
from pysnmp.hlapi import *
print "Get OID"
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('163.162.105.120', 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.6.0')),
ObjectType(ObjectIdentity('1.3.6.1.4.1.10060.1.6.10.4.3.0')) # get session status
)
)
for varBind in varBinds:
print varBind
print "Set Credentials"
errorIndication, errorStatus, errorIndex, varBinds = next(
setCmd(SnmpEngine(),
CommunityData('private', mpModel=1),
UdpTransportTarget(('163.162.105.120', 161)),
ContextData(), ObjectType(ObjectIdentity('1.3.6.1.4.1.10060.1.6.10.4.1.1.0'),OctetString('username')),
ObjectType(ObjectIdentity('1.3.6.1.4.1.10060.1.6.10.4.1.2.0'),OctetString('password')),
ObjectType(ObjectIdentity('1.3.6.1.4.1.10060.1.6.10.4.2.0'),Integer(1)) # open session
)
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print varBind
print "Set OID"
errorIndication, errorStatus, errorIndex, varBinds = next(
setCmd(SnmpEngine(),
CommunityData('private', mpModel=1),
UdpTransportTarget(('163.162.105.120', 161)),
ContextData(), ObjectType(ObjectIdentity('1.3.6.1.4.1.10060.1.6.6.3.29.1.4.1'),OctetString('17a_noRTX')))
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print varBind
不幸的是,我收到了以下错误:
Get OID
SNMPv2-MIB::sysDescr.0 = SAMBHA
SNMPv2-MIB::sysLocation.0 = Cadeo(PC)
SNMPv2-SMI::enterprises.10060.1.6.10.4.3.0 = 0
Set Credentials
'noSuchName' at 1.3.6.1.4.1.10060.1.6.10.4.1.2.0
Set OID
'authorizationError' at 1.3.6.1.4.1.10060.1.6.6.3.29.1.4.1
在脚本中看不到在 MIB 浏览器中设置的相同 OID 1.3.6.1.4.1.10060.1.6.10.4.1.2.0。 你有什么建议吗?
【问题讨论】: