Jak sprawdzić nieograniczony dostęp do Internetu? (wykrywanie portalu w niewoli)

Muszę niezawodnie wykryć, czy urządzenie ma pełny dostęp do Internetu, tzn. Że użytkownik nie jest ograniczony dozmonopolizowany portal (nazywany równieżotoczony murem ogród), tj. ograniczoną podsieć, która zmusza użytkowników do przesyłania poświadczeń na formularzu w celu uzyskania pełnego dostępu.

Moja aplikacja automatyzuje proces uwierzytelniania, dlatego ważne jest, aby wiedzieć, że pełny dostęp do Internetu nie jest dostępny przed rozpoczęciem logowania.

Pytanie brzminie o tym, jak sprawdzić, czy interfejs sieciowy jest włączony iw stanie połączenia. Chodzi o zapewnienie nieograniczonego dostępu do Internetu w przeciwieństwie do segmentu intranetu w piaskownicy.

Wszystkie podejścia, które próbowałem do tej pory nie działają, ponieważ połączenie z dowolnym znanym hostem nie spowodowałoby wyjątku, ale zwróci poprawnyHTTP 200 kod odpowiedzi, ponieważ wszystkie żądania są kierowane do strony logowania.

Oto wszystkie podejścia, które próbowałem, ale wszystkie wracajątrue zamiastfalse z powodów wyjaśnionych powyżej:

1:

InetAddress.getByName(host).isReachable(TIMEOUT_IN_MILLISECONDS);
isConnected = true; <exception not thrown>

2:

Socket socket = new Socket();
SocketAddress sockaddr = new InetSocketAddress(InetAddress.getByName(host), 80);
socket.connect(sockaddr, pingTimeout);
isConnected = socket.isConnected();

3:

URL url = new URL(hostUrl));
URLConnection urlConn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) urlConn;
httpConn.setAllowUserInteraction(false);
httpConn.setRequestMethod("GET");
httpConn.connect();
responseCode = httpConn.getResponseCode();
isConnected = responseCode == HttpURLConnection.HTTP_OK;

Jak więc upewnić się, że mam połączenie z rzeczywistym hostem zamiast ze stroną przekierowania logowania? Oczywiście mogłem sprawdzić rzeczywistą treść odpowiedzi z hosta „ping”, którego używam, ale nie wygląda to na właściwe rozwiązanie.

questionAnswers(6)

yourAnswerToTheQuestion