мне наконец удалось сгенерировать Получить команду к моей собственной MIB со следующим скриптом питона:Как сгенерировать набор команды для моей собственной MIB
from pysnmp.entity.rfc3413.oneliner import cmdgen
errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().getCmd(
cmdgen.CommunityData('10.0.1.134', 'admin', 0),
cmdgen.UdpTransportTarget(('10.0.1.134', 161)),
(1,3,6,1,4,1,4515,1,8,1,1,1,8,1295360,1295360)
)
print (varBinds)
print (varBinds[0])
print (varBinds[0][0])
print (varBinds[0][1])
varBinds печать в 4-х различных способах была только для процесс изучения. Теперь я попытался подражать одному и тому же скрипту, превратив его в команду Set (без каких-либо успехов). Есть много примеров, которые можно получить, но не установлены. Итак, я пробовал следующее:
from pysnmp.entity.rfc3413.oneliner import cmdgen
errorIndication, errorStatus, errorIndex, rspVarBinds = cmdgen.CommandGenerator().setCmd(
cmdgen.CommunityData('10.0.1.134', 'admin', 0),
cmdgen.UdpTransportTarget(('10.0.1.134', 161)),
(1,3,6,1,4,1,4515,1,8,1,1,1,8,1295360,1295360),
(1),
)
Мне не удалось создать команду Set, как вы можете видеть. И я не понимаю, как я могу заставить его работать. Кстати, OID, который я устанавливаю, представляет собой чтение-запись Integer (32 бит) со следующими возможными значениями: up (1), down (2) и standby (3).
Что мне нужно изменить, чтобы преуспеть в установке OID с любым из возможных значений?
Я попробовал ваш сценарий и предложил не удалось:
from pysnmp.hlapi import SnmpEngine, setCmd, CommunityData, UdpTransportTarget, ContextData, ObjectType, ObjectIdentity
from pysnmp.proto.api.v2c import Integer32
setCmd(SnmpEngine(),
CommunityData('public', mpModel=0),
UdpTransportTarget('10.0.1.134', 161),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.4.1.4515.1.8.1.1.1.8.1295360.1295360'), Integer32(1)))
Это сообщения об ошибках, которые я получил:
** Traceback (самый последний вызов последним): Файл «C: \ Program Файлы \ Python35 \ lib \ site-packages \ pysnmp-4.3.2-py3.5.egg \ pysnmp \ hlapi \ asyncore \ transport.py ", строка 56, в _resolveAddr socket.IPPROTO_UDP) [0] [4] [: 2] Файл «C: \ Program Files \ Python35 \ lib \ socket.py», строка 732, в getaddrinfo для res в _socket.getaddrinfo (хост, порт, семейство, тип, прото, флаги): socket.gaierror: [ Errno 11004] getaddrinfo fai привело
Во время обработки вышеуказанного исключения, другое исключение произошло:
Traceback (самый последний вызов последнего): файл "", линия 3, в Файл «C: \ Program Files \ Python35 \ Lib \ site-packages \ pysnmp-4.3.2-py3.5.egg \ pysnmp \ hlapi \ transport.py ", строка 17, в init self.transportAddr = self._resolveAddr (transportAddr) Файл" C: \ Program Files \ Python35 \ lib \ site-packages \ pysnmp-4.3.2-py3.5.egg \ pysnmp \ hlapi \ asyncore \ transport.py ", строка 58, в сообщении об ошибке _resolveAddr.PySnmpError ('Плохой IPv4/UDP-транспортный адрес% s:% s '% (' @ '. join ([str (x) для x в transportAddr]), sys.exc_info() [1])) pysnmp.error.PySnmpError: Bad IPv4/U DP транспортный адрес 1 @ 0 @. @ 0 @. @ 1 @. @ 1 @ 3 @ 4: [Errno 11004] getaddrinfo failed **
Что мне нужно сделать, чтобы исправить это?
Я попробовал ваш предложенный сценарий, и что-то все еще отсутствует. Я отредактировал мой вопрос выше –
Я нашел свою ошибку, мне не хватало скобок в UdpTransportTarget. Теперь я могу запустить свой скрипт без каких-либо ошибок. Моя проблема в том, что команда Set на самом деле не выполняется (я выполняю команду Get commanf через MIB Browser).Мне удалось выполнить действие Get на том же OID, что и раньше (скрипт python). Может быть, мне не хватает ожидания или что-то в этом роде? Есть ли способ отладить это дальше? –
Я снова узнал, чего не хватает. Поскольку я совершенно не знаком с python, я не понял, во-первых, что setCmd (...) - это только оператор, и для того, чтобы отправить команду Set, мне нужно что-то еще. Я узнал, что если я сделаю следующий (setCmd (...)), чем выполняется команда Set (проверена с помощью сниффера). Кстати, есть ли другой способ, кроме использования следующего, применить setCmd? Спасибо за помощь, вы отлично справляетесь. –