Wanneer het apparaat probeert verbinding te maken met een toegangspunt of router, moet het inloggen op de captive portal-pagina met het bericht
“Log in op Wi-Fi-netwerk”.
Hoe werkt het toegangspunt / de router identificeren dat een aanmelding vereist is voor het apparaat en wat is het proces erachter?
Antwoord
De detectie-URL verschilt tussen verschillende Android-versies.
Voor Marshmallow gebruikt het connectivitycheck.gstatic.com/generate_204, controleer de code hier AndroidXRef – Marshmallow 6.0.0_r1
Voor Kitkat gebruikt het clients3.google.com/generate_204 controleer de code AndroidXRef – KitKat 4.4.4_r1
Reacties
Answer
Deze technologie heet “Captive portal”. Er zijn verschillende implementaties. Zoals ik weet, probeert Android een bestand met de naam generate_204
te bereiken op een van de Google-servers en als dit niet mogelijk is, wordt er een melding gegenereerd.
Verder lezen op Wikipedia: Captive_portal
Reacties
- Eigenlijk weet ik van captive portal. Maar ik ken de specifieke URL om het te controleren. Ik wil weten hoe het is om te werken. Niet wat het is.
- Wat bedoel je – " hoe het werkt "? Android verzendt een verzoek en als er geen positief antwoord is, betekent dit dat er geen verbinding met internet is en dat er een melding wordt gegenereerd. Dat ' is hoe het werkt.
- Wat is de specifieke URL waarop Android een verzoek indient. Ik heb het in kwestie genoemd.
- In uw vorige opmerking zei u dat u de specifieke URL kent. Ik denk dat het ' s
https://www.gstatic.com/generate_204
- De URL lijkt clients3.google.com/generate_204 . Informatie afkomstig van deze site voor chroom, wat waarschijnlijk hetzelfde is voor Android. chromium.org/chromium-os/chromiumos-design-docs/…
Answer
Een captive portal wordt over het algemeen geïmplementeerd door al het verkeer naar een geldig HTTP-antwoord (200) te leiden. Dit HTTP-antwoord is wat verschijnt in de captive portal.
Dit kan gedaan worden met tools zoals iptables of dnsmasq.
http://connectivitycheck.gstatic.com/generate_204
feitelijk een 204 zonder inhoud retourneert, en het werkt duidelijk. Misschien heb je deContent-Length: 0
header weggelaten.