获取已连接、未标记、未配置、不可配置的以太网设备的 MAC 地址?

获取已连接、未标记、未配置、不可配置的以太网设备的 MAC 地址?

假设您有一块嵌入式主板,其以太网接口插入笔记本电脑的以太网端口。您还不知道它的网络配置(目前)。您知道它可以启动,但它没有头,只有一个以太网端口。它还没有 IP 地址(目前)。

如何发现设备的 MAC 地址?

我查看过 arp、arping、arp-scan 和 arpwatch。我发现的唯一办法是使用 tshark 并手动梳理 spew。

答案1

运行普通tsharktcpdump会产生混乱的输出,因为来自您的机器的所有流量也会被记录下来。

尝试

tcpdump -i eth0 -lenq 'ether src not <your_mac>'
  • -e也捕获以太网帧
  • -l立即刷新标准输出缓冲区。
  • -n不解析主机名
  • -q安静一点。
  • 用找到的本地接口的 MAC 地址替换<your_mac>例如ip addr show
  • 显然eth0要用正确的接口替换。如果你使用的是 Windows,请使用tshark -D列出所有接口。
  • (编辑)在 Linux 上,您可以使用tcpdump而不是安装tshark,这需要安装整个wireshark软件包。tcpdump应该在 Ubuntu 上预先安装(它位于元包中ubuntu-standard)。

选择:如果您希望仅将源 MAC 地址作为输出,请执行(受到下面 OP 评论的启发并厚颜无耻地改编)

ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'

最好在没有链接的情况下开始捕获,然后插入电缆。

我认为没有办法绕过嗅探流量。ARP 失败的原因是设备没有 IP 地址,不会响应 ARP 请求。

另一种可能的解决方案是将设备连接到托管交换机并读取 MAC 地址表,但我觉得这对您来说不是一个选择。

无论如何,为了能够被检测到,设备需要发出一些某种以太网流量。如果你够幸运的话,它会发送一个 DHCP/Bootp 发现,你可以嗅探它。

(编辑)为什么主机不像交换机那样保存 MAC 表?嗯,它不需要,因为它不是交换机。与交换机不同,主机会根据路由表预先决定从哪个接口发出以太网帧。在 ARP 查找后,IP 数据包会被包装到适当的帧中。

当然,你可以将你的机器变成一个合适的 L2 交换机。你可以在多个物理接口之间创建桥接。我对此进行了一些尝试,结果发现你可以通过这种方式获得一个不错的 MAC 表!

  1. bridge-utils从存储库安装。

  2. 在中创建新的以太网桥/etc/network/interfaces

     auto br0
     iface br0 inet static # dhcp goes as well
      address ...
      network ...
      bridge_ports eth0
      up /sbin/brctl setageing br0 300
      up /sbin/brctl stp br0 0
    

这定义了一个没有生成树的“桥”(实际上没有桥 - 只有一个接口)stp br0 off。地址将在 300 秒后过期。请根据自己的喜好设置,但不要太低。

  1. 架起桥梁:ifup br0

  2. 检查是否启动brctl show并查看 MAC 表:

     brctl showmacs br0
    
  3. 利润 (?)

答案2

您可以使用 wireshark 捕获所有流量并通过 bootp 进行过滤,或者使用-e选项通过 tcpdump 打印链路层信息和 bootp 过滤器:

http://www.tcpdump.org/tcpdump_man.html

sudo tcpdump -i any port bootps -e

相关内容