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

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

Насколько я понимаю, все, что мне нужно, это перехватывать запросы смартфона на специальные 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, и только одно из них показало мне всплывающее окно. Та же проблема с иос. Я поймал запрос на /hotspot-detect.html, вернул тот же ответ, что и выше, и ничего не произошло. Что мне здесь не хватает?

Спасибо!

Привет. Любая идея, как закрыть пользовательскую страницу привязки после аутентификации в Android? или как принудительно проверить подключение с моей собственной пользовательской страницы? Я пробовал перенаправлять window.location, но иногда он зависал с ответом 200 вместо 204. Вы когда-нибудь сталкивались с этой проблемой?

Karthick Jayaraman 21.07.2020 17:20
0
1
1 380
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Спасибо за Ваш ответ! Я понимаю это точно так же. Как вы можете видеть из моего поста, я отправляю ответ перенаправления на запрос /generate_204. Однако заставка не появляется.

Long Smith 22.04.2019 20:44

Верно, не отправляет ответ перенаправления для /generate_204. Просто ответьте обычным текстом состояния 200 или html-страницей, чтобы он появился в качестве заставки.

LavaSlider 24.04.2019 17:28

Я проверю это. Однако я всегда считаю, что ответ должен содержать перенаправление. Даже Вики говорит, что: en.wikipedia.org/wiki/Captive_portal. Смотрите раздел Implementation.

Long Smith 25.04.2019 13:22

Я нашел решение, вы можете посмотреть мой ответ.

Long Smith 25.04.2019 17:09
Ответ принят как подходящий

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

Location: http://192.168.1.1/

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

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

Long Smith 28.04.2019 23:02

Другие вопросы по теме