通过 SNMP 获取网卡接口信息

通过 SNMP 获取网卡接口信息

(从超级用户那里移出这个,我意识到它在这里更合适)

大家好,我需要弄清楚如何通过 SNMP 可靠地获取网络接口的各种信息,例如网卡的 IP 地址、网关、DNS 搜索服务器列表以及接口上是否启用了 DHCP。

不幸的是,我发现这些信息分散在(SNMP)全球的四个角落,我花了很长时间才找到它们。到目前为止,我有 IP 地址,而且我思考我已经想出了如何收集网关,但如果有人能证明我的“算法”,我将不胜感激,因为我也不确定如何针对 IPv6 执行此操作。

我找不到:

  • 每个网络接口卡的 DNS 服务器搜索列表
  • 每个网络接口卡的 DHCP 启用/禁用(即固定或可变 IP 地址)

这是我想出的获取网关的“算法”:

  1. 对于 IF MIB ifTable 中 ifType = Ethernet 的每个条目,获取 ifIndex
  2. 如果可以在 IP Forward MIB inetCidrRouteTable 中找到 ifIndex:
    1. 对于 IPv4 地址,如果 inetCidrRouteDest = 0.0.0.0,则网关为 inetCidrRouteNextHop
    2. 我不知道 IPv6 地址该怎么办???
  3. 否则,如果可以在 IP Forward MIB ipCidrRouteTable 中找到 ifIndex
    • 如果 ipCidrRouteDest = 0.0.0.0,则网关为 ipCidrRouteNextHop
  4. 否则,如果可以在 IP Forward MIB ipForwardTable 中找到 ifIndex
    • 如果 ipForwardDest = 0.0.0.0,则网关为 ipForwardNextHop
  5. 否则,如果可以在 RFC 1213 MIB ipRouteTable 中找到 ifIndex
    • 如果 ipRouteDest = 0.0.0.0,则网关为 ipRouteNextHop

呼!如您所见,这是一场可怕的噩梦。那么有人可以证明/完成我上面的网关算法,或者告诉我有关 DNS/DHCP 的信息吗?

另外仅供参考,Unix/Linux shell 脚本替代品不行——一方面我已经知道如何用这种方法来做,而且我还需要询问非 *nix 设备,比如 Cisco 交换机和路由器以及网络打印机。

谢谢!

答案1

我喜欢用http://tools.cisco.com/Support/SNMP/do/BrowseOID.do查看 OID 是否是当前的或已弃用的。

我觉得你的算法不错。我希望它不要那么复杂。你试过,例如,只检查 ipRouteTable 吗?

对于 DHCP,它是 ipNetToMediaType 或 ipNetToPhysicalType,其值为:INTEGER: dynamic(3)。

没有包含名称服务器的标准 MIB。

答案2

您真正想要的是使用 snmptable 程序,而不是查看 snmp 索引。

例如

/usr/bin/snmptable -v2c -c 公共 $HOST NETAPP-MIB::netifTable

MIBS 实际上非常易于理解。至于其余部分,RedGrittyBrick 已经说明了一切。

答案3

我过去常常使用 snmpwalk 枚举某个点以下的整棵树并将结果保存在文件中,然后您可以搜索一个值(例如 DNS 服务器的 IP 地址)并找到与其关联的 OID。

然后我就会知道应该将哪些 OID 放入我的 MRTG 配置文件中。

不同的制造商将信息粘贴在不同的地方。如果您没有他们的 MIB 定义,那么这是我能找到的逆向工程 OID 的最佳方法。

答案4

如果是 Windows,那么

使用 Visual Basic 创建您自己的程序,我不会使用 SNMP。

相关内容