【问题标题】:pysnmp setcmd "No Such Object currently exists at this OID"pysnmp setcmd“此 OID 处当前不存在此类对象”
【发布时间】: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。 你有什么建议吗?

【问题讨论】:

    标签: pysnmp oid


    【解决方案1】:

    到目前为止,我没有发现您的代码有任何问题。我很确定您的 SNMP 代理不允许您修改要修改的托管对象。

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

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

    顺便说一句,SNMP 代理通常配置为使用不同的 SNMP 社区字符串进行读取和写入操作。有时,写入的默认值是private

    【讨论】:

      【解决方案2】:

      @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"
      

      数据包错误。 原因:无法访问

      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 目前不存在此类对象”)。 我想我应该学习如何设置授权配置文件。但我没有找到任何例子。 谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        相关资源
        最近更新 更多