如何检测 iPhone 是否正在连接网络?

如何检测 iPhone 是否正在连接网络?

通过观察 Wireshark,我注意到当 iPhone 连接到 wifi 网络时,它会向 224.0.0.251(我认为是 LAN 广播)发送一些 IGMP/MDNS 数据包。有没有简单的方法可以监视这些数据包,然后运行脚本或发送事件?

或者,最好的方法是运行数据包嗅探器吗?有没有可以在触发过滤器时发送事件或执行 curl 命令的简单方法?

当我运行 nc -u -l 5353 时,我得到:

My-Name-iPhonelocal???
                            x???)??
                                  ??cc^C

我可以执行以下操作:nc -u -l 5353 | grep iPhonelocal |执行命令...

答案1

此行为并非仅与 iPhone 有关。根据 RFC 3171,IP 224.0.0.251 用于多播 DNS。Bonjour 技术的多播 DNS 功能允许本地网络上的设备通过名称相互连接,而无需单独的 DNS 服务器。

如果您想检测网络上的特定设备,您应该使用 nmap 和远程操作系统检测 (OS-Fingerprinting),但这并非 100% 准确。

答案2

从您的评论中:

我基本上是想在我的 iPhone 进入家庭网络范围后立即运行脚本来打开灯。有什么想法吗?其他人建议使用 sed。

这听起来像一个有趣的项目!

您可以通过每隔 1 或 2 秒使用 ping 轮询来实现这一点。这有点儿不方便,但 ping 带来的开销可以忽略不计。

  1. 配置你的 DHCP 服务器,让它始终为你的 iPhone 分配相同的 IP(基于其 MAC 地址)

  2. 在您的 Linux 计算机上运行一个脚本,每 n 秒尝试 ping 该 IP。

  3. 根据一些简单的 ping 响应标准打开/关闭灯

如果你有像 Zabbix 这样的监控应用程序,你就可以很容易地做到这一点。你可以为你的 iPhone 设置一个 ping 测试,并创建一个运行外部脚本的触发器(打开/关闭灯)。如果这是全部你正在使用它,但我确信你也可以想出其他用途。:)

此外,在您的脚本/触发逻辑中,您应该尝试避免闪烁。一旦 1 个 ping 得到响应,灯就应该打开。只有在 ping 未响应整整 5 分钟后,它才会关闭。这样,当网络拥塞时,您的灯就不会闪烁。

答案3

呵呵,好的,我同意。考虑做这样的事情(我说得比较模糊,因为你必须根据你现有的工具来定制):

  1. 获取你的 iPhone 的 MAC 地址
  2. 在你的 *nix 机器上运行 dhcpd 守护进程
  3. 确保该服务器正在记录
  4. 编写一个 [shell / perl / ruby​​ / python] 脚本来监视该日志文件,并在找到与该 MAC 地址匹配的行时采取行动

就我个人而言,这听起来像是一种比尝试实时与嗅探器交互更简单的方法(但是,也许可以配置 snort 来做这样的事情)。

当然,我假设 iPhone 会在每次连接时尝试更新其租约。

祝你好运!

答案4

http://www.zeroflux.org/projects/knock

您可能能够以某种方式设置 knockd 来响应广播流量。

我使用端口敲击来保护某些服务器上的 SSH。我确信您尝试执行的操作未在任何示例中涵盖,但这可能是可行的。

相关内容