Обычно я не прошу помощи, но я застрял на этом пару дней - и любые подсказки, которые могут быть у кого-то, будут очень признательны.
Я создал точку доступа Wi-Fi (скрытый портал / огороженный сад) - используя Windows Server 2012, Unbound DNS и маршрутизатор Apple Extreme. У меня работает IIS, который заботится о перенаправлениях с помощью перезаписчика URL-адресов, и все это хорошо для устройств iOS.
Я пытаюсь заставить устройства Android отображать всплывающее окно CNA, когда они присоединяются к сети Wi-Fi. Я делаю это по этому правилу в своем web.config
<rule name="android rule" enabled="true" stopProcessing="false">
<match url="(.*)generate_204(.*)" />
<!-- <action type="Redirect" url="http://supplierfinder.ubm-com.net/WebPage.cshtml" appendQueryString="false" redirectType="Temporary" /> -->
<action type="Rewrite" url="WebPage.cshtml" appendQueryString="false" />
</rule>
Я уверен, что это перенаправление работает и обслуживает страницу, когда устройство подключается к сети. Вот запись в журнале
2015-09-05 19:06:48 W3SVC2 WIN-8CHVURO21ID 10.0.1.2 GET / generate_204 - 80 - 10.0.1.12 HTTP / 1.1 Dalvik / 1.6.0 + (Linux; + U; + Android + 4.4.2; + GT -N7100 + Build / KOT49H) - - clients3.google.com 200 0 0 4143
как видите - получаю андроид http://client32.google.com/generate_204 входящий запрос - и я отвечаю перезаписью URL-адреса на действительную страницу (которая обслуживается) 200. Я ожидал, что устройство Android выполнит запрос еще раз, а затем откроет браузер и отобразит страница. Этого не бывает.
Я просмотрел исходный код Android для огороженных садовых соединений, и, насколько я могу судить, то, что я возвращаю, выглядит верным (ниже - исходный код из ОС Android - обратите внимание на логику 204).
urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
urlConnection.setUseCaches(false);
urlConnection.getInputStream();
// We got a valid response, but not from the real google
return urlConnection.getResponseCode() != 204;
} catch (IOException e) {
if (DBG) {
log("Walled garden check - probably not a portal: exception " + e);
}
return false;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
Будем очень признательны за любые указания на то, что я делаю неправильно.
Настроить
Windows Server 2012 - использование несвязанного DNS, IIS 8.5 с расширениями URL Rewrite (http на порту 80 включен) DHCP-сервер на маршрутизаторе Airport Extreme (так как я не могу его отключить)
Мой DNS выглядит так
интерфейс: 0.0.0.0
контроль доступа: 10.0.0.0/8 разрешить
local-zone: "." redirect
local-data: ". A 10.0.1.2"
На данный момент я застрял - поиск исправления в google был немного бесплодным, поскольку все делают собственные порталы со сторонними продуктами - я начинаю думать, что мне следовало также принять этот подход :)
Спасибо за чтение ... ура
Стив