Почему нет? • Обнаружение Captive Portal Android запускает окно браузера?

Я бегло посмотрел, и кажется, что ядро отвергнет путь, который не начинается с '/', так что там невозможно передать ноль. Если только я не смотрю не в то место, это то, что заставляет:

В ядро/аудит_watch.c: audit_to_watch():

if (path[0] != '/' || path[len-1] == '/' ||
    krule->listnr != AUDIT_FILTER_EXIT ||
    op != Audit_equal ||
    krule->inode_f || krule->watch || krule->tree)
        return -EINVAL;

Возможно, стоит подать сообщение об ошибке/запрос против этого

.

5
19.03.2018, 23:42
3 ответа

Решение, которое я нашел, состояло в том, чтобы настроить мой dnsmasq, чтобы он продолжал разрешать все до 192.168.30.1, но иметь некоторые исключения для тестовых серверов портала авторизации:

10.45.12.1 clients3.google.com
10.45.12.1 clients.l.google.com
10.45.12.1 connectivitycheck.android.com
10.45.12.1 connectivitycheck.gstatic.com
10.45.12.1 play.googleapis.com

Обычно, если кто-то пытается разрешить вышеуказанные домены с помощью нашего DNS-сервера, он получает ответ 10.45.12.1.

10.45.12.1 — это случайный IP-адрес, который никому не принадлежит. Только это не должно быть 192.168.30.1.

Список доменов взят из здесь .

После этого, как только вы подключитесь к WiFi RPi, откроется страница браузера, показывающая мой сайт.

Это решение, но не совсем ответ на вопрос, почему это происходит. Если кто-нибудь может объяснить это, я был бы признателен.

Редактировать:

С помощью этого решения, если я несколько раз подключаюсь и отключаюсь от WiFi на устройстве, иногда Android открывает страницу входа, а иногда нет. Для тех, кто делает что-то подобное, в конце концов, для лучшего решения,Я пошел с этим:

  • DNSmasq разрешает все в 10.45.12.1 (или что-то за пределами подсети 192.168.30.0/24 )
    • Он ДОЛЖЕН находиться за пределами подсети 192.168.30.0/24 (или любой другой подсети вашей локальной сети ), иначе клиент попытается использовать ARP для определения MAC-адреса данного устройства и потерпит неудачу, потому что устройства на самом деле не существует
  • Переадресация 80-го порта iptables, поступающего с интерфейса Wi-Fi, на локальный хост

Это работает для Android, OS X и Windows. У меня нет устройства iOS, чтобы проверить это. Согласно этому , устройствам iOS может потребоваться дополнительная работа.

Мне все еще любопытно, зачем это вообще было нужно, и почему преобразование всего в 192.168.30.1 не сработало.

3
27.01.2020, 20:41

Я потратил много времени, пытаясь понять это, и, наконец, сделал это. Вы можете увидеть код здесьhttps://github.com/tretos53/Captive-Portal

Это комбинация доменов, указывающих на общедоступные IP-адреса, iptables и перенаправления nginx.

0
27.01.2020, 20:41

Этому может быть много разных причин, в том числе производитель аппаратного обеспечения вашего телефона. В настоящее время я создал свою библиотеку Captive Portal для ОС Mongoose, отвечающую на все запросы DNS с IP-адресом устройства, и у меня нет проблем с устройствами, кроме устройств Samsung, которые, похоже, требуют ответа 200 с текстом.

Вот стек библиотеки :https://github.com/tripflex/captive-portal-wifi-stack

В частности, вот обработка Captive Portal, а также сведения об используемых мной конечных точках и сведения о том, как это обрабатывается в README:

https://github.com/tripflex/captive-portal

Вы увидите, что одно решение, которое я использовал для устройств Samsung, заключается в возврате 200 со сгенерированными HTML-файлами с использованием метатега обновления:

https://github.com/tripflex/captive-portal#cportalredirect_file-setting

<html>
   <head>
      <title>Redirecting to Captive Portal</title>
      <meta http-equiv='refresh' content='0; url=PORTAL_URL'>
   </head>
   <body>
      <p>Please wait, refreshing.  If page does not refresh, click <a href='PORTAL_URL'>here</a> to login.</p>
   </body>
</html>

Но на самом деле главное было настроить обработку конечных точек для каждого конкретного устройства:

https://github.com/tripflex/captive-portal#known-endpoints

  • /mobile/status.phpAndroid 8.0 (Samsung s9+)
  • /generate_204Андроид
  • /gen_204Андроид
  • /ncsi.txtОкна
  • /hotspot-detect.htmliOS/OS X
  • /hotspotdetect.htmliOS/OSX
  • /library/test/success.htmliOS
  • /success.txtОС X
  • /kindle-wifi/wifiredirect.htmlKindle при запросе с помощью com.android.captiveportallogin
  • /kindle-wifi/wifistub.htmlKindle перед запросом с окном входа в авторизованный портал (, возможно, для обнаружения?)
0
27.01.2020, 20:41

Теги

Похожие вопросы