Jak WiFi w Androidzie wykrywa, czy urządzenie musi się zalogować, czy nie?

28

Gdy urządzenie próbuje połączyć się z punktem dostępu lub routerem, musi zalogować się na stronie portalu dostępowego z komunikatem

„Zaloguj się do sieci Wi-Fi”.

W jaki sposób punkt dostępowy / router identyfikuje, że urządzenie musi się zalogować i jaki jest za tym proces?

Sagar Vaghela
źródło

Odpowiedzi:

32

Adres URL wykrywania różni się w zależności od wersji Androida.

W przypadku Marshmallow używa connectivitycheck.gstatic.com/generate_204, sprawdź kod tutaj AndroidXRef - Marshmallow 6.0.0_r1

W przypadku Kitkat używa klientów3.google.com/generate_204 sprawdź kod AndroidXRef - KitKat 4.4.4_r1

RyanDH
źródło
w rzeczywistości jest to o wiele lepsza odpowiedź i powinna być oznaczona jako poprawna odpowiedź
Moataz Elmasry
Nie chciałem przechwycić odpowiedzi, edytując ją, więc zostawię komentarz. Zajęło mi trochę czasu, aby uświadomić sobie, że wykrywający adres URL wyzwala powiadomienie, jeśli nie można do niego dotrzeć. Ponadto potrzebowałem punktu dostępu, aby odpowiedzieć na to żądanie treścią - w moim przypadku zwróciłem kod 200, a także stronę indeksu mojego serwera WWW, gdy zażądano / wygenerować_204. Bez treści w odpowiedzi, niezależnie od kodu powrotu, otrzymywałbym powiadomienie „Wi-Fi nie ma dostępu do Internetu”.
ubomb
@ubomb Wydaje się dziwny, ponieważ http://connectivitycheck.gstatic.com/generate_204faktycznie zwraca 204 bez zawartości i oczywiście działa. Może właśnie pominąłeś Content-Length: 0nagłówek.
Tamir Daniely,
9

Technologia ta nosi nazwę „Portal dla niewoli”. Istnieje kilka implementacji. Jak wiem, Android próbuje dotrzeć do pliku o nazwie generate_204na jednym z serwerów Google, a jeśli nie jest to możliwe, generowane jest powiadomienie.

Dalsza lektura na Wikipedii: Captive_portal

Άνδρας
źródło
Właściwie wiem o niewoli portalu. Ale znam konkretny adres URL do sprawdzenia. Chcę wiedzieć, jak to działa. Nie to co to jest.
Sagar Vaghela,
1
Co masz na myśli - „jak to działa”? Android wysyła żądanie, a jeśli nie ma pozytywnej odpowiedzi, oznacza to, że nie ma połączenia z Internetem i generowane jest powiadomienie. Tak to działa.
Άνδρας
Który jest konkretnym adresem URL, na który żąda Androida. Wspomniałem o tym w pytaniu.
Sagar Vaghela,
2
W poprzednim komentarzu powiedziałeś, że znasz określony adres URL. Myślę, że tohttps://www.gstatic.com/generate_204
Άνδρας
2
Wygląda na to, że URL to klienci3.google.com/generate_204 . Informacje pobrane z tej strony dla chromu, który prawdopodobnie jest taki sam dla Androida. chromium.org/chromium-os/chromiumos-design-docs/…
benjamin
2

Portal typu „captive” jest zwykle wdrażany przez kierowanie całego ruchu do prawidłowej odpowiedzi HTTP (200). Ta odpowiedź HTTP pojawia się w niewoli portalu.

Można to zrobić za pomocą narzędzi takich jak iptables lub dnsmasq.

Jude Osborn
źródło