假设您有一块嵌入式主板,其以太网接口插入笔记本电脑的以太网端口。您还不知道它的网络配置(目前)。您知道它可以启动,但它没有头,只有一个以太网端口。它还没有 IP 地址(目前)。
如何发现设备的 MAC 地址?
我查看过 arp、arping、arp-scan 和 arpwatch。我发现的唯一办法是使用 tshark 并手动梳理 spew。
答案1
运行普通tshark
或tcpdump
会产生混乱的输出,因为来自您的机器的所有流量也会被记录下来。
尝试
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 表!
bridge-utils
从存储库安装。在中创建新的以太网桥
/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 秒后过期。请根据自己的喜好设置,但不要太低。
架起桥梁:
ifup br0
检查是否启动
brctl show
并查看 MAC 表:brctl showmacs br0
利润 (?)
答案2
您可以使用 wireshark 捕获所有流量并通过 bootp 进行过滤,或者使用-e
选项通过 tcpdump 打印链路层信息和 bootp 过滤器:
http://www.tcpdump.org/tcpdump_man.html
sudo tcpdump -i any port bootps -e