SNMP输出选项 - 如何仅获取OID响应值?

时间:2015-04-01 09:00:27

标签: mysql bash snmp net-snmp mib

我必须使用我一直在研究的BASH脚本从一些支持SNMP的网络打印机中收集一些OID。

我的要求:

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#lbAF

-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 dB,我在我的故事模式中设置数据类型,请求是一致的所以我知道OID的定义,所以我不需要我得到的所有信息返回,只是OID本身的值,所以我可以将它写入我的dB而不操纵响应。我可能可以操纵响应将信息拉到":"并写入OID的值。

我相对较新的SNMP(http://www.net-snmp.org/),但我不明白为什么这不是一个更常见的问题,因为我一直在寻找答案,这篇文章是我最后的追索权......

2 个答案:

答案 0 :(得分:7)

您可以使用-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)

答案 1 :(得分:0)

您可以使用简单的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]+'