Какой ответ требуется для появления адаптивного портала?

Я пытаюсь реализовать захватывающий портал на небольшом встраиваемом устройстве.

Насколько я понимаю, все, что мне нужно, это захватить запросы смартфона по специальным URL-адресам и отправить ответ, содержащий страницу адаптивного портала. Чтобы не поддерживать список всех возможных URL-адресов, я настроил DNS, который разрешает все хосты на IP-адрес моего устройства.

Теперь, когда я подключаю устройство Android к своей сети, я перехватываю запрос к /generate_204 и отправляю ответ перенаправления. Вот пример запроса и ответа от команды curl:

curl -v http://google.com/generate_204 

*   Trying 192.168.1.1...
* Connected to google.com (192.168.1.1) port 80 (#0)
> GET /generate_204 HTTP/1.1
> Host: google.com
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 302 Found
< Content-Type: text/html
< Content-Length: 0
< Location: /
< 
* Connection #0 to host google.com left intact

Используя Postman / Chrome, я перенаправляюсь на 192.168.1.1/, и необходимая страница загружается. Однако я протестировал 4 устройства Android, и только одно показало мне всплывающее окно. Та же проблема с ios. Я поймал запрос, чтобы /hotspot-detect.html возвратил тот же ответ, что и выше, и ничего не произошло. Что мне здесь не хватает?

Спасибо!


person Long Smith    schedule 09.04.2019    source источник
comment
Привет! Есть идеи, как закрыть настраиваемую страницу захвата после аутентификации в Android? или как принудительно проверить подключение с моей настраиваемой адаптивной страницы? Я пробовал перенаправить window.location, но иногда он зависал с ответом 200 вместо 204. Вы когда-нибудь сталкивались с этой проблемой?   -  person Karthick Jayaraman    schedule 21.07.2020


Ответы (2)


Насколько я понимаю, если вы вернете что-либо, кроме того, что возвращает тестовый сайт отдельного адаптивного портала (т. Е. Что http://google.com/generate_204 возвращает, если это был запрошенный URI или какой http://captive.apple.com//hotspot-detect.html возвращает, если это был запрошенный URI), тогда то, что вы возвращаете, будет отображаться, так называемый экран-заставка. Возвращение того, что возвращают эти URL-адреса, должно подавить заставку и заставить устройство думать, что оно подключено к Интернету.

person LavaSlider    schedule 22.04.2019
comment
Табж за ответ! Я понимаю это точно так же. Как вы можете видеть из моего сообщения, я отправляю ответ перенаправления на запрос / generate_204. Однако заставка не появляется. - person Long Smith; 22.04.2019
comment
Правильно, не отправляйте ответ перенаправления для / generate_204. Просто ответьте обычным текстом состояния 200 или HTML-страницей, чтобы она отображалась как заставка. - person LavaSlider; 24.04.2019
comment
Я это проверю. Однако я всегда считаю, что ответ должен содержать перенаправление. Даже в Вики говорится: en.wikipedia.org/wiki/Captive_portal. См. Раздел Implementation. - person Long Smith; 25.04.2019
comment
Я нашел решение, можете посмотреть мой ответ. - person Long Smith; 25.04.2019

Я нашел ответ. Заголовок местоположения в ответе на перенаправление должен выглядеть иначе. Особенно:

Location: http://192.168.1.1/

Это решает проблему.

person Long Smith    schedule 25.04.2019
comment
@LavaSlider да, все запросы перенаправляются через DNS. Однако проблема заключается в формате заголовка Location. Он должен содержать либо доменное имя, либо IP-адрес хоста, на который указывает перенаправление. Это функция HTTP, которая не имеет ничего общего с перенаправлением DNS. - person Long Smith; 29.04.2019