На работе пришлось по ходу решить небольшую проблему, с которой наверняка уже сталкивались некоторые администраторы. Необходимо было сменить IP адрес сетевого принтера
Вроде бы пустяковая задача, только в том случае если бы предыдущий администратор оставил пароль на вход в панель администрирования принтера. Но человек давно не работает, а запароленный принтер вот он - перед нами. И как сами понимаете пароль никто не знает.
И хотелось бы сбросить настройки по умолчанию, но опять же доступ к этому пункту меню запаролен. Конечно же есть процедура восстановления настроек по умолчанию с помощью нажатия каких то кнопок и выключения-включеня принтера, но:
1. они для каждого принтера свои
2. необходим физический доступ к принтеру
3. для этого надо читать инструкцию или запрашивать службу поддержки:)
Но в нашем случае мы пойдем другим путем и воспользуемся возможностью работать с сетевыми устройствами через протокол SNMP.
Не все администраторы знают о существовании протокола управления сетевыми устройствами, еще меньше людей знают, о том, что с помощью SNMP можно записывать и давать команды сетевому устройству и еще меньше людей, уделяют смене так называемыму параметру community на всех своих сетевых устройствам.
Мы воспользуемся именно тем, что в подавляющем случае никто не меняет данные community RO (read only) и RW
(read write) которые часто принимают значения public и private. С точки зрения безопасности, это огромная брешь в сетевой инфраструктуре, но в нашем случае это спасательный круг, который поможет нам удаленно сбросить настройки принтера по умолчанию.
Про протокол SNMP написано много и мы рассказывать о том что это и как им пользоватся не будем.
Поставленную задачу будем решать с помощью ManageEngine MibBrowser. За последний год это единственная адекватная ( не триальная) программа позволяющая легко решать нашу задачу. Для продвинутых пользователей и тех кто работает на Linux системах и snmpwalk устроит с MIB библиотеками, но мы хотим предоставить легкую инструкцию как перегружать, сбрасывать настрйоки принтера удаленно.
Программа выглядит вот так
![Manage Engine MIB](/images/111/mib1.PNG)
Введем данные, которые нам известны по нашему принтеру. Community,которые установлены по умолчанию, на этом принтере мне пришлось найти в интернете и они оказались одинаковыми что на чтение, что на запись и имею значение public
![доступ по snmp](/images/111/mib2.PNG)
Все остальные параметры понятны, IP адрес устройства и порт SNMP 161
Зайдем в бибилиотеку SNMPv2-MIB и попробуем прочитать имя устройства
![SNMPv2-MIB выбор](/images/111/mib3.PNG)
Для получения информации, нажимаем sysName, потом правой кнопкой вызываем меню и там выбираем GET
В этом же меню мы можем увидеть, какие параметры мы можем перезаписывать а какие только читать. Где зеленый лист перечеркнут - это read-only(только чтение без возможности изменять значения).
![Чтение по SNMP system.name](/images/111/mib4.PNG)
Мы увидели что наш принтер имеет имя NPI6AB729
Все это хорошо, но где наше решение проблемы? Давайте перейдем в другую бибилиотеку MIB
![](/images/111/mib5.PNG)
И прочитаем значения аттрибута prtGeneralReset а также его описание
![Reset printer](/images/111/mib6.PNG)
Похоже это именно то, что мы искали. В описании буквально говорится следующее: "Setting this value to `powerCycleReset', `resetToNVRAM', or `resetToFactoryDefaults' will result in the resetting of the printer. When read, this object will always have the value `notResetting(3)', and a SET of the value `notResetting' shall have no effect on the printer. Some of the defined values are optional. However, every implementation must support at least the values `notResetting' and resetToNVRAM'."
То есть если хотите просто перегрузите запишите в этот аттрибут значение powerCycleReset, если хотите сбросить на заводские настроки то resetToFactoryDefaults
Нам нужно втрое, и поэтому в поле Set Value мы пишем resetToFactoryDefaults
![Выбор OID](/images/111/mib7.PNG)
и правой кнопкой мыши вызываем команду не GET а SET.
Ошибка? Не работает?
Не удивительно, смотрите какой аттрибут мы прочитали (на предыдущем рисунке) prtGeneralReset.1 а записать пытаемся в Object ID prtGeneralReset
Разницу видите?
Достаточно в в поле Object ID добавить в конец строки .1 что бы она приобрела такой вид
.iso.org.dod.internet.mgmt.mib-2.printmib.prtGeneral.prtGeneralTable.prtGeneralEntry.prtGeneralReset.1
и еще раз попытатся установить новое значение командой SET
Ошибки нет? будьте уверены что тот принтер, которому вы подали команду, уже находится в процессе перезагрузки.
Всё, наша задача решена.
Напоследок, покидая эту замечательную программу, пролистнув mib для принтеров, можно убедится насколько много различных значений можно установить удаленно, не разбираясь в драйверах и не копошась в дисплее в три строки, стоя у принтера.
Удачи в работе!