[前一段时间,我开发了一个脚本来通过snmpwalk
和IF-MIB::ifDescr
查询网络接口,输出格式类似于STRING: eth0
。操作系统是使用net-snmp的SLES11(它仍然可以使用net-snmp-5.7.3在SLES12中工作)。
然而,在其他OS(仍然是Linux)上,接口字符串表示为STRING: "port1"
(请注意,双引号引起来)。现在的问题是:谁负责额外的双引号?是不同版本的net-snmp还是不同的SNMP代理?还是在代理中错误地实现了其中一项结果?
据我所知,SNMP协议中双引号不是必需,因为字符串始终以其长度传输。
一般来说是不可能的。
虽然SNMP代理提供一个[[quoted字符串以响应对ifDescr
(或其他任何信息!)的查询,这是不寻常的(也是不希望的),因为它们确实不属于合同的一部分。在该级别的字符串中,SNMP世界充满了奇怪,变异和规格偏差,因此您不能认为这将永远不会发生。
您应检查实际数据。您可以通过使用tcpdump
之类的工具嗅探SNMP数据包并将其加载到Wireshark(以前是Ethereal)之类的UI中来实现。然后,您可以观察数据报的
actual
内容,而无需使用Net-SNMP格式。如果包含引号,则是代理的错。如果不是,则应用程序正在添加它们以进行显示。作为社论,如果您告诉我们实际上]是什么“不同的” Linux OS,以及您在其上使用的是哪个版本的Net-SNMP,我们可以确认(或排除)选项两个给你。