通过观察 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 带来的开销可以忽略不计。
配置你的 DHCP 服务器,让它始终为你的 iPhone 分配相同的 IP(基于其 MAC 地址)
在您的 Linux 计算机上运行一个脚本,每 n 秒尝试 ping 该 IP。
根据一些简单的 ping 响应标准打开/关闭灯
如果你有像 Zabbix 这样的监控应用程序,你就可以很容易地做到这一点。你可以为你的 iPhone 设置一个 ping 测试,并创建一个运行外部脚本的触发器(打开/关闭灯)。如果这是全部你正在使用它,但我确信你也可以想出其他用途。:)
此外,在您的脚本/触发逻辑中,您应该尝试避免闪烁。一旦 1 个 ping 得到响应,灯就应该打开。只有在 ping 未响应整整 5 分钟后,它才会关闭。这样,当网络拥塞时,您的灯就不会闪烁。
答案3
呵呵,好的,我同意。考虑做这样的事情(我说得比较模糊,因为你必须根据你现有的工具来定制):
- 获取你的 iPhone 的 MAC 地址
- 在你的 *nix 机器上运行 dhcpd 守护进程
- 确保该服务器正在记录
- 编写一个 [shell / perl / ruby / python] 脚本来监视该日志文件,并在找到与该 MAC 地址匹配的行时采取行动
就我个人而言,这听起来像是一种比尝试实时与嗅探器交互更简单的方法(但是,也许可以配置 snort 来做这样的事情)。
当然,我假设 iPhone 会在每次连接时尝试更新其租约。
祝你好运!
答案4
http://www.zeroflux.org/projects/knock
您可能能够以某种方式设置 knockd 来响应广播流量。
我使用端口敲击来保护某些服务器上的 SSH。我确信您尝试执行的操作未在任何示例中涵盖,但这可能是可行的。