

添付画像にあるように、カフェなどにあるwifiスポット圏内に入った時に表示される認証画面についてなのですが、これはどういう仕組みで表示されるのでしょうか？

アクセスポイントからbeaconなどの何らかの信号を受け取ってアクションしていると思うのですが、どのタイミングでその通知に対するハンドラーが端末にセットされているのでしょうか？

下記、参考になるかもしれないのでCaptiveNetworkクラスのURLを貼っておきます。  
<https://support.apple.com/en-us/HT204497>

[![画像の説明をここに入力](https://i.stack.imgur.com/jgYrB.jpg)](https://i.stack.imgur.com/jgYrB.jpg)


CC BY-SA 3.0
2015-08-27T14:25:09.050
14913
2015-08-28T03:18:39.487
2020-06-17T08:14:45.997
-1
11095
question
ios iphone network
captive Wi-Fi networksの認証画面の表示の仕組み


このようなログインが必要なWi-
fiスポットは、ログインしていない状態で適当なウェブサイト（例えば`apple.com`とか）にアクセスすると、そのリクエストを傍受して強制的にログイン画面にリダイレクトさせるような設定になっています。

この挙動を利用してiOSはアクセスポイントに接続したときに、Appleのサーバーにテスト用のHTTPリクエストを送ることで、ログインが必要なWi-
fiスポットかどうかを自動的に判断しています。

つまり、Appleのサーバーのデータが期待通りに返ってきた場合は認証が不要と判断して何もしませんが、リダイレクトによって違うデータが返ってきた場合はログイン画面と判断してそのページをポップアップするようになっています。

参考: <http://arubanetworks.com/wp-content/uploads/Amigopod-CNA-bypass-
AppNote.pdf>


CC BY-SA 3.0
2015-08-27T14:56:48.800
14916
2015-08-27T14:56:48.800
3639
14913
answer


> これはどういう仕組みで表示されるのでしょうか？

Web認証は標準化されてないのでメーカーごとに実装が異なるようですが例えばCiscoの機器では次のように[説明](http://www.cisco.com/cisco/web/support/JP/100/1005/1005098_web_auth_config.html)されています。

>   * ユーザが Web ブラウザを開いて、<http://www.cisco.com> などの URL を入力します。 クライアントは、宛先の IP
> を取得するため、この URL の DNS 要求を送信します。 WLC が DNS サーバに DNS 要求をバイパスし、DNS サーバが宛先
> <http://www.cisco.com> の IP アドレスを含む DNS 応答を返します。 この応答はワイヤレス クライアントに転送されます。
>
>   * 続いて、クライアントは宛先 IP アドレスを使用して TCP 接続を開始しようとします。 www.google.com の IP
> アドレスを宛先とする TCP SYN パケットが送信されます。
>
>   * WLC には、クライアント用に設定されたルールがあるため、www.google.com のプロキシとして動作することができます。 WLC
> は、www.google.com の IP アドレスを送信元とする TCP SYN-ACK パケットをクライアントに送信します。 クライアントは、3
> ウェイ TCP ハンドシェイクを完了するために、TCP ACK パケットを返し、TCP 接続が完全に確立されます。
>
>   * クライアントは、宛先が www.google.com である HTTP GET パケットを送信します。 WLC
> が、このパケットをインターセプトして、リダイレクト処理用に送信します。 HTTP アプリケーション ゲートウェイは、HTML
> 本文を準備し、クライアントから要求された HTTP GET への応答として返します。 この HTML によって、クライアントが WLC のデフォルト
> Web ページ URL（http:///login.html など）に誘導されます。
>
>   * クライアントは、たとえば、www.example.com などの IP アドレスとの TCP 接続を閉じます。
>
>   * ここで、クライアントは <http://1.1.1.1/login.html> に誘導されます。 つまり、クライアントは WLC の仮想 IP
> アドレスとの TCP 接続を開こうとします。 WLC へ 1.1.1.1 に対する TCP SYN パケットを送信します。
>
>   * WLC は、TCP SYN-ACK で応答し、クライアントは WLC に TCP ACK を返して、ハンドシェイクが完了します。
>
>   * クライアントが、ログイン ページを要求するために、1.1.1.1 宛ての /login.html の HTTP GET を送信します。
>
>   * この要求は、WLC の Web サーバに到達して許可され、サーバはデフォルト ログイン ページで応答します。 クライアントは、ブラウザ
> ウィンドウでログイン ページを受信し、ユーザはブラウザでログインできます。
>
>

クライアントにIPが必要ですのでDHCPも通しているはずです。  
同様の機能は有線のネットワークスイッチにもあります。


CC BY-SA 3.0
2015-08-28T03:18:39.487
14928
2015-08-28T03:18:39.487
5008
14913
answer