pysnmp setcmd“此OID当前不存在此类对象”

时间:2018-04-13 12:52:22

标签: pysnmp oid

我需要使用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(会话状态= START)

会话开始后我设置了参数

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。 你有什么建议吗?

2 个答案:

答案 0 :(得分:0)

到目前为止,我没有看到您的代码存在任何问题。我非常有信心,您的SNMP代理不允许您修改要修改的托管对象。

它是否适用于Net-SNMP的snmpset?

snmpset -v1 -c public  1.3.6.1.2.1.1.9.1.3.1 s 'new value'

顺便说一下,SNMP代理经常被配置为使用不同的SNMP社区字符串进行读写操作。有时默认为私有用于写入。

答案 1 :(得分:0)

@Ilya,我尝试使用net-snmp。

snmpget -v 2c -c public 163.162.105.120 1.3.6.1.4.1.10060.1.6.6.3.29.1.11.1

SNMPv2-SMI :: enterprises.10060.1.6.6.3.29.1.11.1 = STRING:“VirtualNoiseProfile”

snmpset -v 2c -c public 163.162.105.120 1.3.6.1.4.1.10060.1.6.6.3.29.1.11.1 s "new string"

数据包错误。 原因:noAccess

snmpset -v 2c -c private 163.162.105.120 1.3.6.1.4.1.10060.1.6.6.3.29.1.11.1 s "new string"

数据包错误。 原因:authorizationError(拒绝该对象的访问) 失败的对象:SNMPv2-SMI :: enterprises.10060.1.6.6.3.29.1.11.1

主机不允许设置操作,也不公开既不是私有,也不是python消息 误导性(“此OID目前不存在此类对象”)。 我想,我应该学习如何设置授权配置文件。但我没有找到任何例子。 谢谢。