0

我正在尝试使用 snmpwalk 在 python 中创建一个脚本,以获取连接到我的交换机的当前设备以及它们使用的端口(我获取 MAC 地址,然后,使用我拥有的数据库,我将转换为 IP 或主机名)。

好吧,一切都很好,但我意识到此信息的 OID 编号在某些交换机之间会发生变化。

我正在尝试获取此 OID:1.3.6.1.2.1.17.4.3.1.2

这工作正常,我得到了 MAC 和端口号。

但在我的一些开关中是这个:1.3.6.1.2.1.17.7.1.2.2 而在其他开关中是:1.3.6.1.2.1.17.4.3.1.2

我对此感到很困惑,我想知道我是否在寻找 OID 号码而不是名称方面做得很好。无论如何,我尝试使用某些名称(sysUpTime 等)查找信息,但 snmpwalk 不适用于名称(至少,它对我不起作用,我不确定我必须使用哪个名称来获取此信息)。例如,我试过:

$ snmpwalk -v 1 -c public sea-kmSwitch dot1dTpFdbPort
dot1dTpFdbPort: Unknown Object Identifier (Sub-id not found: (top) -> dot1dTpFdbPort)

我知道 python 中有 snmp 模块,但我没有找到好的文档和示例(pysnmp、pynetsnmp),所以我尝试使用 linux 命令来编写脚本。

所以,问题是:我怎么知道我必须得到哪个 OID 号码?我可以使用任何 OID 名称吗?如何?

谢谢和对不起我的英语。

4

1 回答 1

1

您的程序不适用于 SNMP 名称,因为您没有导出放置 MIB 文件的路径和要使用的 MIB 文件列表。

如果你想使用带有 NET-SNMP 框架的 Linux(即 snmpwalk 命令),那么请在执行脚本之前设置以下环境变量:MIBDIR 和 MIBS。

export MIBDIR=<path_to_mib_files>
export MIBS=ENTITY-MIB:SNMPv2-TC:<any_other_mibs_you_need>

您可以在运行时直接在脚本中导出这些变量,就在调用任何使用 OID 以 SNMP 名称形式的命令之前(即 sysLocation.0 而不是 1.3.6.1.2.1.1.6.0)。

请注意,您必须为 MIB 变量定义比要求更广泛的 MIB 文件集 - 这是因为您的特定 MIB 文件很可能使用一些基于 RFC 的 MIB 文件。要确定您需要导出哪些 MIB 文件,请查看您感兴趣的 MIB 中的 IMPORTS 部分。

希望有帮助。

于 2012-08-27T18:20:30.087 回答