我正在使用 Net-SNMP,并尝试查找我的计算机 IP 和 MAC 地址,但它不起作用。这是我正在运行的命令:
snmpget -v 2c -c public localhost 1.3.6.1.2.1.4
我收到此消息:
IP-MIB::ip = No Such Object available on this agent at this OID
我也尝试过这个:
snmpwalk -v 2c -c public localhost sysORID.7
但我得到的答复是:
SNMPv2-MIB::sysORID.7 = OID: IP-MIB::ip
我做错了什么?谢谢!
答案1
要获取与接口相关的信息,您需要 IF-MIB。具体来说,轮询
IF-MIB::ifPhysAddress
OID 以获取 MAC 地址,例如:snmpwalk -v 2c -c public localhost IF-MIB::ifPhysAddress
根据盒子上有多少个接口,这将返回一行或多行。它们可能看起来像这样:
IF-MIB::ifPhysAddress.1 = STRING: 01:23:45:67:89:AA IF-MIB::ifPhysAddress.2 = STRING: 01:23:45:67:89:AB IF-MIB::ifPhysAddress.3 = STRING: 01:23:45:67:89:AC
末尾
.X
的IF-MIB::ifPhysAddress.1
表示对象的索引;在此特定情况下,表示接口的索引。然后,您可以轮询IF-MIB::ifDescr
以查看哪个索引对应哪个接口,例如:IF-MIB::ifDescr.1 = STRING: sit0 IF-MIB::ifDescr.2 = STRING: eth0 IF-MIB::ifDescr.3 = STRING: eth1
或者,你可以遍历整个子树:
snmpwalk -v 2c -c public localhost IF-MIB::ifEntry
因为这会产生非常长的、不是特别易读的输出,特别是如果有很多接口),您可以执行以下操作来获取有关单个接口的信息(
2
此示例中带有索引):snmpwalk -v 2c -c public localhost IF-MIB::ifEntry | grep '\.2 '
或者,您可以轮询一个表并获取更整洁的输出(使用
-Cf
标志设置分隔符):snmptable -Cf \; -v 2c -c public localhost IF-MIB::ifTable
要获取 IP 地址,您需要 IP-MIB。您可以对这些 OID 使用上面描述的相同技术:
IP-MIB::ipAddrTable
和IP-MIB::ipAddrEntry
。您可以使用 探索 MIB 以
snmptranslate
阅读 OID 的描述,或查看 MIB 的结构。请参阅 snmptranslate 的手册页以获取更多信息。例如:snmptranslate -Td IF-MIB::ifTable snmptranslate -Tp IP-MIB::ipAddrTable