ОПЦИИ ВЫХОДА 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]+'
Другие вопросы по тегам