2025-05-27

Собственно любое необходимое нам значение для систем мониторинга можно получить в виде oid формата .1.3.6.1.4.1.15.Х и снимать через удобный SNMP

В моем случае возникла задача мониторить старенький ИБП Ippon, snmp – карты в нем, конечно же, нет, и покупать ее никто не собирался, но есть USB подключенный к компу, им и воспользуемся.

Для начала нам понадобится включить службу SNMP на имеющейся Windows(x64), как это сделать можно найти на просторах интернета

Далее копируем библиотеку snmptools.dll в папку C:\Windows\

Затем для наших нужд создадим папку Scripts на диске С для скриптов (путь будет C:\Scripts\)

В этой папке создадим файл counters.ini и для теста вставим содержимое

[1.3.6.1.4.1.15.1]
type=string
counter=SNMP TEST
snmpcounter

О созданных файлах необходимо внести изменение в реестр, для этого можно воспользоваться готовым файлом или создать свой с расширением reg

Содержимое файла:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents]
"snmptools"="SOFTWARE\\snmptools\\CurrentVersion"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\snmptools\currentversion]
"counters"="C:\Scripts\counters.ini"

"debug"="1"
;system32=C:\Windows\SysWOW64 under x64
"Pathname"="%systemroot%\snmptools.dll"
"oid"="1.3.6.1.4.1.15"

Где counters – путь до counters.ini

debag – 1 = вести логи (лог будет в корне диска C), 0 = отключить ведение логов

Перезапускаем службу SNMP

После чего можем проверять, для проверки я воспользуюсь SNMPWALK.exe

Для этого копирую snmpwalk.exe в ту же рабочую папку C:\Scripts\

Открываем терминал CMD и вставляем туда

c:\Scripts\SnmpWalk.exe -r:127.0.0.1 -c:public -os:.1.3.6.1.4.1.15 -op:.1.3.6.1.4.1.15.9

snmpget

Видим наше значение, если что-то пошло не так, то не забываем про лог файл в корне диска C

Далее необходимо отредактировать ранее созданный counter.ini желаемыми значениями сопоставив с oid

Примерное содержание может быть следующим:

;Для статичной записи
[1.3.6.1.4.1.15.1]
type=string
counter=SNMP TEST

;Для запуска скриптов VBS
[1.3.6.1.4.1.15.2]
type=exec
counter=cscript /nologo c:\1c_sessions.vbs

;Для однострочных команд
[1.3.6.1.4.1.15.3]
type=exec
counter=cmd /c hostname

;Для запуска python скриптов
[1.3.6.1.4.1.15.4]
type=exec
counter=python3 c:\Scripts\test.py

;Для запуска Powershell скриптов
[1.3.6.1.4.1.15.5]
type=exec
counter=powershell c:\Scripts\test.ps1

В моем случае для связи через USB c ИБП Ippon была установлена штатная программа WinPower, которая умеет запускать собственный веб-сервер доступный по адресу https://IP:8888, и к тому же умеет отдавать данные в формате JSON по адресу https://IP:8888/0/json

Этого оказалось достаточно, пишем простой Powershell скрипт и парсим нужное значение 

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
$json = (New-Object System.Net.WebClient).DownloadString('https://IP:8888/0/json')
$data = $json | ConvertFrom-Json
$data.batCapacity.Trim('%')
batcapac

Увы, запрос json у ибп доступен только через ssl зашифрованное соединение, в нашем случае с невалидным сертификатом. Powershell явно не умеет игнорировать сертификат, для этого и пользуемся [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } перед запросом. Список всех доступных значений можем получить поменяв $data.batCapacity.Trim(‘%’) на $data

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *