我刚刚花了一周的时间解决这个问题,所以我可以避免在我妻子上班时向她发送家庭短信警报。
Ping 不起作用,因为 iPhone 在睡眠时不会响应 ICMP。读取 ARP 缓存不起作用,因为睡眠中的 iPhone 会来来去去(每 30 秒检查几分钟)。
我发现“可靠”确定我的两部 iPhone 何时在我的本地(家庭)网络上的唯一方法是使用 PCAP dotnet 库来查找来自任一电话 MAC 地址的任何数据包。例如,如果您使用捕获过滤器运行 Wireshark
ether src <iphone-mac-address>
您会看到来自手机的大量网络发现/公告流量。它仍然有静止状态,但到目前为止,我看到的捕获数据包之间的最长间隔约为 10 分钟。在宣布它不在家之前,您必须等到您在一段时间内(我使用 15 分钟)没有接到电话。
使用这种技术,假设您的电话配置为 DHCP,您将在电话重新加入家庭网络时快速找到它。我还在我的主以太网交换机上使用端口镜像来包含来自我的无线接入点的流量。
我没有 Raspberry Pi 解决方案,因为我的 linux 专业知识非常有限,但其他人可能能够在这些方面为您提供帮助。我有一个使用 PCAP 库的 Windows 服务,到目前为止它工作可靠,限制是在确定 iPhone 离开网络之前等待 15 分钟。
* 2018 年 2 月 3 日更新 *
我将这个检测算法缩短到大约 5 分钟,使用定向到每部电话的 ping/arp 消息的组合,大约每分钟一次。似乎工作得很好。