2011-09-28 1016 views
2

我正在制作网络设备监视器。其中一部分是PHP前端,用户可以输入他感兴趣的SNMP值(SNMP OID)。我想简化用户的流程,因此我想创建一个简单的MIB浏览器,允许用户从树中选择值。解析SNMP MIB文件(OID翻译)

问题是将MIB文件从数据库中读取(或者至少是类似于XML的格式),然后将它们呈现给用户。即时解析MIB文件对我来说似乎很浪费,因此排除了PHP的snmp_read_mib() - 除非我可以读取MIB一次并将OID转换保存到数据库?

此外,我想避免编写我自己的解析器,如果可能的话。 :)

我发现libsmi,但我不知道如何使用它的这种情况下...我尝试使用smidump,但只能创建一些简短的XML没有有用的内容。尽管我没有尝试使用xmldump,因为它在Debian上不可用(作为包),并且必须从源代码构建它。另外,我认为它是从2005年开始的。它会有帮助吗?

所以问题是:如何从MIB文件中读取OID名称和/或其他数据(SNMP陷阱信息)并将它们转换为某种随时可用的格式?

+0

你写了关于“...读取MIB一次,并保存OID翻译...”与我认为是怀疑;你担心你会溢出内存吗? MIB - 或者至少对你很重要的部分 - 可能相当小。我不会感到惊讶,你可以简单地将它们保留在表示树的PHP变量中。 *我*会在那里开始我的实验。在任何情况下,这将远离PHP编码的第一个MIB浏览器... –

+0

不,这不是怀疑 - 我没有看到从MIB文件中获取所有可能的OID转换的方法(只是函数来翻译已知的单个奥迪斯/名)。我在这里错过了什么吗?顺便说一句:我需要浏览可能的值,而不是设备上的值...我希望这是有道理的。 :) – johndodo

+0

johndodo,我们可能会混淆对方。在回复时,我想强调一下:PHP编码的MIB浏览器已经可用,并且可能会让您感兴趣。除此之外,我只是建议您走完整个MIB并保留所有可能对您有用的数据。你想要那样做的代码吗? –

回答

2

我结束了使用Mibble - 我写的,它使用的小程序该库分析MIB并输出数据。很简单,似乎很好地工作。

不过,谢谢你们都试图帮助我 - 我欣赏它!

+1

johndodo,感谢*你*报告你的经验。你说得很对,我的阅读很粗心,并且没有意识到你是从*文件*而不是LDAP实例工作的。我很高兴听到你的Mibble方法成功。 –

1
smidump -f identifiers <MIB_filename> 

如果MIB是没有达到标准与它的语法,使用

smilint -ms <MIB_filename> 

这应该让你开始

+0

谢谢,但只是打印“由于严重的解析错误而中止”(在ExtremeNetwork的MIB上测试:http://extremenetworks.com/libraries/services/v762b3.mib),开关“-k”没有帮助... smilint也会返回错误,所以我猜MIB是不正确的。但是,我仍然需要解析它。 – johndodo