Wi-Fi 接続時に OS のログインダイアログを出させる方法 (Captive portal)
無料 Wi-Fi なんかでよくある、接続時にログインさせられるやつ。あれの名前は Captive portal というやつらしい。各OSともにこれを検出したときはログインダイアログを表示するような実装になっている。
Captive portal が出る条件は (OSによって違うだろうけど)
- OS 側が用意するドメインへの http アクセスをリダイレクトすること
のようだ。OS側が用意するドメインとは例えば
- captive.apple.com (macOS)
- connectivitycheck.gstatic.com (Android)
みたいなやつ
やることとしては
- DNS サーバを立てる。全ての A レコードクエリに対し captive portal の IP アドレスを返すようにする
- DHCP の DNS サーバに自分の IP アドレスを指定
- captive portal は HTTP サーバを立て、自分以外のホストへのリクエストをすべて自分のホストへリダイレクトする
これで macOS と Android でダイアログが出ることは確認した。
メモ
自力で DNS Server を実装するとOSの違いに気付くことがある
- macOS は DNS response に QUERY が含まれていなくても (ANSWER だけで) 認識する
- Android は DNS response にQUERY が含まれていないと認識しない
関連エントリー
- LAN 内の mDNS に応答するホストを列挙したい PTR _services._dns-sd._udp.local. A/AAAA [ソースアドレス].in-addr.arpa. をやりたい...
- Android Studio (IntelliJ IDEA) + AquaSKK で aiueo がそのまま入力されてしまうのを直す JRE込みのPyCharmで日本語入力がおかしい · Issue #24 · codefirst/aquaskk · GitHub この問題...
- Ubuntu 18.04 LTS に Tensorflow GPU nvidia driver のインストールまわりで Ubuntu が起動しなくなったり操作不能になったりする。OS 再インストールを何度かし...
- さくらのVPSのウェブサーバでIPv6の接続をうける 最初からアドレスついてたので意外とやることない。 ifconfig すると既に v6 のアドレスがついている。Scope:Global にな...