2

我有一个 Debian 服务器。此服务器应检查我的家庭 wifi 中是否有可用的 iPhone。问题是,如果移动数据可用,i-Devices 会将 wifi 模块暂停到安全电源。因此,一种解决方案是,只需关闭移动数据,wifi 中的发现就可以正常工作。(但这对我来说不是一个真正的解决方案,因为每次在家时手动执行此操作很烦人,而且其他人也会使用此软件。)

到目前为止使用 iPad Mini 和 iPhone5 (ios7) 进行了测试:

  1. 我已经完成了 android 的任务,如果我的网络连接发生变化,在 Android 中会有一个广播,所以我只需要以编程方式捕捉广播并在我的 Debianbox 上注册我。在 iDevice 上尝试了同样的方法,但似乎无法在后台拦截 Objective-C 中的 Wifi-Status-Changes。在前台,它可能通过 Apple-Reachability-Class。但我需要它在后台,所以这对我来说是不可能的。

  2. 扫描我 iPhone 的所有端口并尝试发出请求,希望这能唤醒我的 Wifi 模块:

    • 打开 UDP 端口:

      • 港口国服务版本
      • 999/udp 打开|过滤的应用程序
      • 1090/udp 打开|过滤 ff-fms
      • 5001/udp 打开|过滤的复杂链接
      • 5353/udp 打开|过滤的 zeroconf
      • 18134/udp 打开|过滤未知
      • 19141/udp 打开|过滤未知
      • 19717/udp 打开|过滤未知
      • 20919/udp 打开|过滤未知
      • 21354/udp 打开|过滤未知
      • 31625/udp 打开|过滤未知
      • 49191/udp 打开|过滤未知
      • 57409/udp 打开|过滤未知
    • 打开 TCP 端口:

      • 港口国服务版本
      • 62078/tcp 打开 tcpwrapped

    我尝试在端口 5353 UDP (Bonjour/MDNS) 上使用netcat发出请求。结果是 iDevices 在前 30 分钟内真正唤醒了 wifi 模块!在那段时间之后,如果请求唤醒 wifi 模块,这是一种幸运。我认为大约 30 分钟后可能会有“深度睡眠”。

  3. MacBookPro 作为 wifi 热点和连接到此的 iDevices。然后我用 Wireshark 嗅探整个流量以检查通过 Wifi 发送的消息。至少找到了一个由每个 iOS7 设备完成的 MDNS 多播。这个消息可以被一个小的 python 服务器捕获。-> 有效,但设备发送多播的时间是 1 分钟到 30 多分钟,所以它不是固定的。

  4. 一个创造性的方法:静默推送通知来唤醒iDevice,之后可以ping wifi。所以推送通知只是唤醒了我的wifi!-> 有效,但 APN 服务器不会告诉您推送消息是否已发送,因此它不是很可靠。我已经对此进行了测试,有时 APN 服务器会“吞下”该消息。每 5 分钟检查一次互联网连接和移动数据流量,以检查我的设备是否在 wifi 中……这并不是真正的最佳做法。但迄今为止电池寿命的最佳解决方案。

  5. 触发您在家中使用地理围栏区域。这是可能的,并且有效,但它的电池成本很高。但也许没有其他好的解决方案。

  6. arp-scan 是一个向 ip-range 发出 arp-request 的工具。如果打开移动数据,这不起作用,否则它会起作用。

所以我的问题:

  • 我可以发送特定端口上的请求以唤醒 iDevice 的 wifi 模块吗?
  • 是否有一种客观的方法来解决这个任务?
  • 我可以发送 MDNS 请求,iDevice 会回答吗?
  • 我可以创建一个具有后台监听套接字并且 Debianbox 连接到该套接字的应用程序吗?
  • 还有其他可以解决此任务的想法吗?我没主意了。

谢谢

4

2 回答 2

0

问题是,如果移动数据可用,i-Devices 会暂停 wifi 模块以安全供电

我没有阅读您的整个问题,因此如果您遗漏了某些内容,请放心,但是为了避免设备在 30 分钟后暂停 Wi-Fi,请将此密钥添加到您的 info.plist

UIRequiresPersistentWiFi

UIRequiresPersistentWiFi (Boolean - iOS) 指定应用程序是否需要 Wi-Fi 连接。iOS 在应用程序运行时保持活动的 Wi-Fi 连接打开。

于 2013-12-06T12:35:39.377 回答
0

您是否尝试过可达性?Apple 有自己的框架供您使用。试试他们的这个示例:https ://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

希望这能回答你的问题。

于 2015-08-05T02:33:22.667 回答