Диспетчер доступности AFNetworking для домена — всегда доступен, несмотря на закрытый портал

Я использую диспетчер доступности AFNetworking для мониторинга доступности для определенного домена, как показано ниже:

reachabilityManager = [AFNetworkReachabilityManager managerForDomain:@"www.xyz.com"];
[reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusReachableViaWWAN:
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    DLog(@"***became reachable***");
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                default:
                    DLog(@"***became UNreachable***");
                    break;
            }
        }];
[reachabilityManager startMonitoring];

Он работает хорошо, за исключением случаев, когда устройство подключено к авторизованному порталу/сети с отключенными всеми остальными данными. По какой-то причине менеджер считает, что устройство находится в доступном состоянии, несмотря на то, что домен на самом деле недоступен (если ввести соответствующий URL-адрес в браузере, он перенаправляет на страницу авторизации портала авторизации).

Я делаю что-то неправильно? Если нет, то есть ли способ обойти это?

Спасибо!


person G.S.    schedule 22.05.2014    source источник


Ответы (1)


К сожалению, доступность просто проверяет, отвечает ли конкретный хост или имя DNS. Captive-порталы работают, как вы видели из браузера, отвечая на все запросы, чтобы отобразить страницу входа независимо от того, к какому сайту пытается получить доступ пользователь. Таким образом, доступность говорит о том, что домен доступен, потому что он получил ответ. Он не может отличить «настоящий» ответ от перехватывающего портала.

Вам нужно будет сделать так, чтобы ваш код пытался получить известную часть информации с вашего сайта, когда она «доступна» — что-то вроде «http://example.com/signature.txt", где signal.txt содержит текст, который вы можете проверить. Если вы получите соответствующее значение обратно, то вы знаете, что действительно разговариваете со своим сайтом. Если нет, то, вероятно, это захваченный портал.

person Paulw11    schedule 22.05.2014
comment
Логично, я как-то надеялся, что это не так. О, хорошо, спасибо! - person G.S.; 26.05.2014