【问题标题】:How to get MAC or IP Addresses of devices connected to a switch using SNMP?如何使用 SNMP 获取连接到交换机的设备的 MAC 或 IP 地址?
【发布时间】:2020-12-04 03:15:37
【问题描述】:

使用 SNMP,如何获取连接到交换机上每个端口的设备的 MAC 地址?我们正在使用 HP ProCurve 开关。

我尝试使用 OID dot1dTpFdbPort,但这似乎给了我与交换机通信的每个设备的 MAC 地址,而不仅仅是连接到它。

我正在尝试在列表中找到可以为我提供端口 1-48 的 OID,以及每个端口连接到该端口的设备的 MAC(或 IP 地址)。

谢谢!

【问题讨论】:

    标签: snmp


    【解决方案1】:

    非常感谢 raz3r 的回答。 它就像一个魅力!

    从你的 linux 服务器:

    $ snmpwalk -v 1 -c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.2 | grep “整数:11”

    (端口号 11)

    将返回:

    SNMPv2-SMI::mib-2.17.4.3.1.2.44.118.138.64.143.95 = 整数:11
    SNMPv2-SMI::mib-2.17.4.3.1.2.56.170.60.108.174.57 = 整数:11
    SNMPv2-SMI::mib-2.17.4.3.1.2.104.181.153.172.54.237 = 整数:11
    SNMPv2-SMI::mib-2.17.4.3.1.2.120.172.192.143.226.236 = 整数:11
    SNMPv2-SMI::mib-2.17.4.3.1.2.124.195.161.20.109.76 = 整数:11
    SNMPv2-SMI::mib-2.17.4.3.1.2.152.75.225.59.127.180 = 整数:11

    然后你可以这样做来查找连接的Mac地址:

    $ snmpwalk -v 1 -c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.1 | grep "152.75.225.59.127.180"

    返回mac地址:

    SNMPv2-SMI::mib-2.17.4.3.1.1.152.75.225.59.127.180 = 十六进制字符串:98 4B E1 3B 7F B4

    您可以制作一个 script.sh 来执行此操作...

    【讨论】:

    • 其实第一个查询已经包含了MAC地址:“152.75.225.59.127.180”是“98 4B E1 3B 7F B4”的十进制表示。您无需再进行一次 snmpwalk 即可对其进行转换。
    【解决方案2】:

    您几乎就在那里 :) dot1dTpFdbPort 正是您要寻找的,您唯一需要的是指向真实端口索引的链接。

    首先,取dot1dTpFdbPort给出的值。

    现在使用您之前获取的值查询 dot1dBasePortIfIndex。

    我们举个例子:

    snmpwalk -v 2c -c xxx 192.168.x.x 1.3.6.1.2.1.17.4.3.1.1
    
    SNMPv2-SMI::mib-2.17.4.3.1.1.0.2.253.255.213.15 = Hex-STRING: XX XX XX XX XX XX
    
    snmpwalk -v 2c -c xxx 192.168.x.x 1.3.6.1.2.1.17.4.3.1.2
    
    SNMPv2-SMI::mib-2.17.4.3.1.2.0.2.253.255.213.15 = INTEGER: 22
    
    # Notice the 22 :)
    
    snmpwalk -v 2c -c xxx 192.168.x.x 1.3.6.1.2.1.17.1.4.1.2.22
    
    SNMPv2-SMI::mib-2.17.1.4.1.2.22 = INTEGER: 10122
    

    【讨论】:

    • 请注意,这不是很有效,因为您需要查看整个表格。不幸的是,似乎没有允许直接执行端口-> MAC 查找的表。
    • @Marki,我认为不可能有这样的事情,因为每个端口可能有多个 MAC。这是一个 1:N 的关系,而 MAC:port 是 1:1。 (我自己也经历过这个废话。)
    • 因此我说可能有一个 (或表,每个端口一个)显示这种关系。
    【解决方案3】:

    尝试使用 HEX 直接获取 MAC 地址:

    snmpwalk -OX -v 2c -c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.2 
    

    【讨论】:

      【解决方案4】:

      Netsnmp 的snmptable 在这里可能更具可读性。

      示例dot1dTpFdb 表检索:

      snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  192.168.x.x    BRIDGE-MIB::dot1dTpFdbTable
         index dot1dTpFdbAddress dot1dTpFdbPort dot1dTpFdbStatus
      '..?...'   98:4B:E1:3B:7F:B4           13          learned
      // other rows snipped for brevity
      

      示例dot1dBasePort 表检索:

      snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  192.168.x.x   BRIDGE-MIB::dot1dBasePortTable
       index dot1dBasePort dot1dBasePortIfIndex    dot1dBasePortCircuit dot1dBasePortDelayExceededDiscards dot1dBasePortMtuExceededDiscards
          13            13                10113 SNMPv2-SMI::zeroDotZero                                  0                                0
      // other rows snipped for brevity
      

      【讨论】:

        【解决方案5】:
        #!/bin/bash
        # This should iterate thru each active port. 
        HOST=xxx.xxx.xxx.xxx ## Change this to the ip address of the switch
        echo
        snmpwalk -v 1 -c public "$HOST" 1.3.6.1.2.1.17.4.3.1.1 | grep "$" |awk -- '{print $4":"$5":"$6":"$7":"$8":"$9}'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          • 2019-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-07
          相关资源
          最近更新 更多