ОПЦИИ ВЫХОДА SNMP - Как получить только значение ответа OID?
Мне нужно пройти и собрать несколько OID с некоторых сетевых принтеров с поддержкой SNMP с помощью скрипта BASH, над которым я работал.
Мой запрос:
snmpget -v2c -c public 192.168.0.77
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
Мой фактический ответ:
.1.3.6.1.2.1.1.1 = Counter32: 1974
.1.3.6.1.2.1.1.2 = Counter32: 633940
Желаемый ответ:
1974
633940314
(только значения oid)
Я посмотрел и протестировал несколько вариантов, используя ресурс с сайта ниже:
http://www.netsnmp.org/docs/man/snmpcmd.html
-Oq
удаляет '=', так работает
snmpget -v2c -c public -Oq 10.15.105.133
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
возвращается
.1.3.6.1.2.1.1.1 Counter32: 1974
.1.3.6.1.2.1.1.2 Counter 32: 633940314
так что я знаю, что правильно сформулировал свой запрос.
Я беру значения и записываю их в MYSQL дБ, я устанавливаю типы данных в своей схеме сказки, запрос согласован, поэтому я знаю определение OID, поэтому мне не нужна вся информация, которую я получаю, просто значение самого OID, поэтому я могу записать его в свой дБ, не манипулируя ответом. Я, вероятно, могу манипулировать ответом, вытягивая информацию справа от ":" и записывая значение OID.
Я относительно новичок в SNMP ( http://www.net-snmp.org/), но не могу понять, почему это не самый распространенный вопрос, потому что я всюду искал ответ, и этот пост - мой последний обращение...
2 ответа
Вы можете настроить выход с помощью -O
аргумент:
snmpgetnext -Oqv -v 2c -c public 192.168.0.77 .1
2
Увидеть --help
:
q: quick print for easier parsing
v: print values only (not OID = value)
Вы можете обработать вывод простым Awk или sed
сценарий, или даже просто grep
(если у вас есть grep -P
).
snmpget -v2c -c public 192.168.0.77 <<'____HERE' | awk '{ print $4 }'
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
____HERE
или же
.... | sed 's/.*: //'
или же
.... | grep -oP ':\K[0-9]+'