pysnmp setcmd Нет такого объекта в настоящее время не существует с этим OID

Мне нужно установить некоторые параметры OID с помощью Python. Я сделал этот простой скрипт, используя библиотеку 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' для настройки) и смог установить определенный OID для этого устройства snmp v2 (Selta ONU), предоставив учетные данные в определенных 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

Тот же OID 1.3.6.1.4.1.10060.1.6.10.4.1.2.0, который был установлен в MIB Browser, не отображается в сценарии. Есть ли у вас какие-либо предложения?


person Gero    schedule 13.04.2018    source источник


Ответы (2)


Я пока не вижу проблем с вашим кодом. Я вполне уверен, что ваш SNMP-агент не позволяет вам изменять управляемый объект, который вы хотите изменить.

Работает ли он с snmpset Net-SNMP?

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

Кстати, часто агенты SNMP настраиваются на использование разных строк сообщества SNMP для операций чтения и записи. Иногда для записи используется значение по умолчанию private.

person Ilya Etingof    schedule 13.04.2018

@ Илья, мои попытки с 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"

Ошибка в пакете. Причина: authorError (отказано в доступе к этому объекту) Неудачный объект: SNMPv2-SMI::enterprises.10060.1.6.6.3.29.1.11.1

Хост не разрешает операцию установки, ни публичную, ни частную, а также если сообщение python вводит в заблуждение («Нет такого объекта в настоящее время не существует с этим OID»). Полагаю, мне следует научиться устанавливать профиль авторизации. Но я не нашел примеров. Спасибо.

person Gero    schedule 16.04.2018