私はDebianサーバーを持っています。このサーバーは、自宅の Wi-Fi で iPhone が利用可能かどうかを確認する必要があります。問題は、モバイルデータが利用可能な場合、i-Devices が wifi モジュールを安全な電力に一時停止することです。したがって、1 つの解決策は、モバイル データをオフにするだけで、Wi-Fi での検出が正常に機能することです。(しかし、これは私にとって本当の解決策ではありません。なぜなら、家にいるたびに手動でこれを行うのは面倒で、他の人もこのソフトウェアを使用するからです。)
これまでに iPad Mini と iPhone5 (ios7) でテスト済み:
私はAndroidのタスクを完了しました。Androidでは、ネットワーク接続が変更された場合にブロードキャストがあるため、プログラムでブロードキャストをキャッチし、Debianboxに登録するだけです。iDevice で同じことを試みましたが、バックグラウンドで Objective-C の Wifi-Status-Changes をインターセプトできないようです。フォアグラウンドでは、Apple-Reachability-Class を通じて可能です。しかし、バックグラウンドで必要なので、これは不可能です。
iPhone のすべてのポートをスキャンし、Wifi モジュールが起動することを期待してリクエストを実行してみます。
UDP ポートを開く:
- ポート ステート サービス バージョン
- 999/udp open|filtered applix
- 1090/udp オープン|フィルタリングされた ff-fms
- 5001/udp open|filtered commplex-link
- 5353/udp open|filtered 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分くらいで「深い眠り」が来ていると思います。
Wi-Fi ホットスポットとしての MacBookPro と、これに接続された iDevices。次に、Wireshark を使用してトラフィック全体を盗聴し、Wifi 経由で送信されたメッセージを確認しました。少なくとも、すべての iOS7 デバイスによって行われる MDNS マルチキャストが見つかりました。このメッセージは、小さな Python サーバーでキャッチできます。-> 動作しますが、デバイスがマルチキャストを送信する期間は 1 分から最大 30 分以上であるため、安定していません。
創造的な方法: iDevice をウェイクアップするためのサイレント プッシュ通知。その後、wifi での ping が可能です。つまり、プッシュ通知は私の Wi-Fi を起動するだけです。-> 動作しますが、APN サーバーはプッシュ メッセージが配信されたかどうかを通知しないため、あまり信頼できません。これをテストしたところ、APN サーバーがメッセージを「飲み込む」ことがありました。そして、5 分ごとにインターネット接続とモバイル データ トラフィックをチェックして、デバイスが Wi-Fi に接続されているかどうかを確認します。これはベスト プラクティスとは言えません。しかし、これまでのところバッテリー寿命の最良の解決策です。
ジオフェンス リージョンで自宅にいることをトリガーします。これは可能で機能しますが、バッテリーのコストが非常に高くなります。しかし、おそらく他に良い解決策はありません。
arp-scan は、ip-range に対して arp-request を行うツールです。モバイルデータがオンになっている場合、これは機能しません。
だから私の質問:
- iDevice の wifi モジュールをウェイクアップするために送信できる特定のポートにリクエストはありますか?
- このタスクを解決する客観的な方法はありますか?
- MDNS リクエストを送信できますか? iDevice はそれに応答しますか?
- バックグラウンド リスニング ソケットと Debianbox がそれに接続するアプリを作成できますか?
- このタスクを解決できる他のアイデアはありますか? 私はアイデアがありません。
ありがとう