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

8

我需要使用一个我一直在研究的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数据库,我在我的表模式中设置了数据类型,请求是一致的,所以我知道OID的定义,因此我不需要所有返回的信息,只需要OID本身的值,这样我就可以将其写入我的数据库而不操作响应。我可能可以通过提取“:”右侧的信息并写入OID的值来操作响应。

我对SNMP(http://www.net-snmp.org/)相对较新,但我不明白为什么这不是一个更常见的问题,因为我已经到处搜索答案,这篇文章是我最后的求助...


你的示例中是否删除了“实际响应”的几个数字?它与讨论的其余部分不符。 - tripleee
不确定这是否是一个编程问题。其中一个答案是一个编程答案,不过。=) - Jolta
2个回答

16

您可以使用-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
对我来说,Stackoverflow的精髓在于:提供一个简洁明了的答案来解决特定问题。-Oqv就是黄金。 - Joe

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接