Обычно обнаружение портала не работает, пытаясь получить доступ к странице через HTTP и проверяя, что возвращаемая страница соответствует ожидаемой.
Android, к примеру, подключится http://clients1.google.com/generate_204
, что просто возвращает HTTP-статус 204
. Предположительно, iOS-клиенты работают аналогичным образом.
Чтобы открыть ваше приложение описанным вами способом, вам просто нужно перенаправить все HTTP-запросы, которые еще не направлены на ваш сервер приложений. Таким образом, клиенты никогда не получат ожидаемый результат.
Этого можно достичь с помощью NAT, iptables
если в качестве шлюза для клиентов установлена система Debian. Это можно сделать с помощью правила, аналогичного следующему APPSERVER
: IP-адрес вашего сервера приложений:
iptables -t nat -D PREROUTING ! -d APPSERVER -p tcp –-dport 80 -j DNAT –to-destination APPSERVER
Однако я не уверен, насколько целесообразно использовать помощника портала в неволе, поскольку они часто очень ограничены, и у пользователя могут возникнуть трудности с возвратом в приложение, если он случайно закроет помощника портала. Некоторые старые устройства также могут не иметь возможности автоматически обнаруживать наличие захваченного портала. Поскольку пользователь никогда не сможет получить доступ к Интернету через вашу сеть, помощник портала может продолжать периодически показывать ваше приложение или помечать сеть как не имеющую доступа в Интернет и предотвращать будущие подключения.