如何检测 .local 上是否存在已知 MAC 地址?(并获得 IP)

网络工程 MAC地址 ip ip 链接本地
2022-02-06 08:08:29

我想制作一个存在检测应用程序,它能够检测已知设备何时连接到本地 Wifi 网络。所以基本上我会知道设备的 MAC 地址,但是 IP 是动态分配的,所以它可以改变。

我只能依靠已知的 MAC 来确定设备是否在这里,我该怎么做?

我想过一种可能性:

  • 在我的网络上执行广播 ping(ping 255 个可能的 IP)。

  • 然后做一个 arp 请求并查看 ARP 表并尝试找到已知的 MAC

  • 如果我找到它,设备就在这里,我可以看到 IP,如果 MAC 不存在,则设备不在网络上

根据我的实验,这可能可行,但它并不聪明,需要永久的 ping 广播,在某些情况下可能会很慢。而且它也不会是节能的。

我来自电气工程,没有丰富的网络背景,所以请原谅我可能愚蠢的问题。希望有人愿意帮助我:)

谢谢你。

4个回答

tcpdump按 MAC 地址过滤输出:
sudo tcpdump ether host A1:B2:C3:D4:E5:F6
根据需要添加其他选项。

最简单的被动方法是侦听 ARP 流量(广播)以检测设备何时在网络上。一个更复杂的方法是在 AP 上添加某种形式的“代理”,以便通知所有关联/解除关联。如果您使用的是 DHCP,您也可以在那里观看。

我只能依靠已知的 MAC 来确定设备是否在这里

寻找 MAC 地址可能不可靠。MAC 地址很容易被欺骗,许多无线设备会随机化它们的 MAC 地址以保护隐私。

除非收听者非常靠近接入点 (WAP),否则收听广播的可靠性会更低。您放置的距离越远,监听器错过的 WAP 远端的流量就越多。

如果您想可靠地识别特定客户端,则需要检查 WAP,因为它是唯一可以查看所有流量和登录的客户端。使用 SNMP 陷阱似乎是合理的。

此外,您不能使用 WPA-PSK,但每个客户端/用户都需要使用单独的身份验证来进行正确识别(WPA-Enterprise with RADIUS)。

但是,如果客户端的 MAC 地址不存在被欺骗或随机分配的风险,您可以使用 DHCP 保留来避免完全动态的 IP 地址。然后,您可以只针对特定 IP 地址进行 ARP 并检查回复。另一种选择是监视 DHCP 服务器的新租约和扩展。

所以我一直在寻找如何解决我的问题,我发现使用 tcpdump 工具可以帮助我很多。

sudo tcpdump -e -f可以监听通过 wifi 传输的所有数据,并读取数据包的标头,因为它们通常并不神秘。-e 选项显示 MAC 地址。

它工作得很好,但我想缩小结果范围,只显示有趣的 MAC 地址。我试过sudo tcpdump -e -f src myMacAddress其中 myMacAddress 是有趣的 MAC,但它返回一个错误并停止执行

tcpdump: pktap_filter_packet: pcap_add_if_info(en0, 1) 失败: pcap_add_if_info: pcap_compile_nopcap() 失败