我怎样才能让 snmpwalk 在其输出中转义新行?

我怎样才能让 snmpwalk 在其输出中转义新行?

我已经检查过文档但什么也没看到——有人知道是否有可能转义某些 OID 返回的换行符吗?

我需要解析脚本中的输出,这让我很头疼。

例如:

$ snmpwalk -v2c -c public -Oq 10.0.0.1 1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 Cisco Internetwork Operating System Software
IOS (tm) Catalyst 4000 L3 Switch Software (cat4000-I5S-M), Version 12.2(18)EW4, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2005 by cisco Systems, Inc.
Com
SNMPv2-MIB::sysObjectID.0 SNMPv2-SMI::enterprises.9.1.502
DISMAN-EVENT-MIB::sysUpTimeInstance 122:19:10:46.16
SNMPv2-MIB::sysContact.0 012345
SNMPv2-MIB::sysName.0 name
SNMPv2-MIB::sysLocation.0 London,uk,emea

在我的代码中,我可以解析输出的每一行,并在第一个空格处将其拆分,直到我得到像上面的 sysDescr OID 这样的多行响应为止。如果有某种方法可以在响应中实际打印 \n 而不是真正的新行,那就太好了。

答案1

您可以尝试通过此sed脚本传输您的输出:

$ snmpwalk ... | sed -n '/MIB::/!{H;$g};/MIB::/{$!x;s/\n/\\n/g;ta;${x;/^$/!p;x};:a;/^$/!p}'
SNMPv2-MIB::sysDescr.0 Cisco Internetwork Operating System Software\nIOS (tm) Catalyst 4000 L3 Switch Software (cat4000-I5S-M), Version 12.2(18)EW4, RELEASE SOFTWARE (fc1)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2005 by cisco Systems, Inc.\nCom
SNMPv2-MIB::sysObjectID.0 SNMPv2-SMI::enterprises.9.1.502
DISMAN-EVENT-MIB::sysUpTimeInstance 122:19:10:46.16
SNMPv2-MIB::sysContact.0 012345\nfoo\nbar
SNMPv2-MIB::sysName.0 name
SNMPv2-MIB::sysLocation.0 London,uk,emea

下面是一个更易读的 AWK 版本,但稍微长一些:

$ snmpwalk ... | awk 'function printit() {printf prev; if (accum) printf "\\n" accum; print ""} !/MIB::/{accum=accum "\\n" $0} /MIB::/{if (NR>1) {printit()}; accum=""; prev=$0} END{printit()}'

答案2

  • 尝试:snmpwalk--hexOutputLength = 1024 .....
  • 或者禁用换行符:snmpwalk--hexOutputLength = 0 .....

参考:
https://it.sourceforge.net/p/net-snmp/mailman/message/16868020/
http://net-snmp.sourceforge.net/docs/man/snmp.conf.html

相关内容