Какой ответ требуется, чтобы появился портал? - PullRequest
0 голосов
/ 09 апреля 2019

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

Как я понимаю, все, что мне нужно, это захватывать запросы смартфонов на специальные 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

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Я нашел ответ. Расположение заголовка в ответе на перенаправление должно выглядеть иначе В частности:

Location: http://192.168.1.1/

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

0 голосов
/ 22 апреля 2019

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

...