Мне нужно установить некоторые параметры 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, не отображается в сценарии. Есть ли у вас какие-либо предложения?