2015-04-01 122 views
0

我必须通过一些支持SNMP的网络打印机来收集一些OID,并使用我一直在研究的BASH脚本。SNMP OUTPUT OPTIONS - 如何获得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/),但我不明白为什么这不是更常见的问题,因为我一直在回答到处寻找和这个职位是我的最后手段...

+0

您是否在示例中删除了“实际响应”中的几位数字?这与讨论的其余部分不匹配。 – tripleee 2015-04-01 09:25:44

+0

不确定这是一个编程问题。不过,其中一个答案是编程答案。 =) – Jolta 2015-04-13 11:55:10

回答

4

您可以调整与-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) 
+0

这是-Oqv选项的技巧,谢谢 – user2179455 2015-04-01 19:30:15

+0

对我来说,这就是Stackoverflow的全部内容;对特定问题的简单回答。 '-Oqv'是黄金。 – Joe 2017-01-22 14:43:04

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]+'