Wie erkennt WiFi in Android, ob sich das Gerät anmelden muss oder nicht?

Wenn das Gerät versucht, eine Verbindung zu einem Zugriffspunkt oder Router herzustellen, muss es sich auf der Seite des Captive-Portals mit der folgenden Meldung anmelden

„Bei WLAN-Netzwerk anmelden“.

Wie erkennt der Access Point/Router, dass eine Anmeldung für das Gerät erforderlich ist und was ist der Prozess dahinter?

Antworten (3)

Die Erkennungs-URL unterscheidet sich zwischen verschiedenen Android-Versionen.

Für Marshmallow wird Connectivitycheck.gstatic.com/generate_204 verwendet, überprüfen Sie den Code hier AndroidXRef - Marshmallow 6.0.0_r1

Für Kitkat verwendet es client3.google.com/generate_204, überprüfen Sie den Code AndroidXRef - KitKat 4.4.4_r1

Ich wollte die Antwort nicht entführen, indem ich sie bearbeite, also hinterlasse ich einfach einen Kommentar. Ich habe eine Weile gebraucht, um zu erkennen, dass die Erkennungs-URL die Benachrichtigung auslöst, wenn sie nicht erreichbar ist. Außerdem brauchte ich meinen Zugangspunkt, um auf diese Anfrage mit irgendeiner Art von Inhalt zu antworten - in meinem Fall habe ich einen 200-Code sowie die Indexseite meines Webservers zurückgegeben, wenn /generate_204 angefordert wird. Ohne Inhalt in der Antwort würde ich unabhängig vom Rückgabecode die Benachrichtigung "WLAN hat keinen Internetzugang" erhalten.
@ubomb Scheint seltsam, da http://connectivitycheck.gstatic.com/generate_204tatsächlich ein 204 ohne Inhalt zurückgegeben wird und offensichtlich funktioniert. Vielleicht hast du nur die Content-Length: 0Überschrift weggelassen.

Diese Technologie wird als „Captive Portal“ bezeichnet. Es gibt mehrere Implementierungen. Wie ich weiß, versucht Android, eine Datei mit dem Namen generate_204auf einem der Google-Server zu erreichen, und wenn dies nicht möglich ist, wird eine Benachrichtigung generiert.

Weiterführende Literatur auf Wikipedia: Captive_portal

Eigentlich kenne ich Captive Portal. Aber ich kenne die spezifische URL, um sie zu überprüfen. Ich möchte wissen, wie es funktioniert. Nicht was es ist.
Was meinst du mit "wie es funktioniert"? Android sendet eine Anfrage, und wenn keine positive Antwort erfolgt, bedeutet dies, dass keine Verbindung zum Internet besteht und eine Benachrichtigung generiert wird. So funktioniert das.
Welches ist die spezifische URL, auf welcher Android-Anfrage. Ich habe fragliche Erwähnung.
In Ihrem vorherigen Kommentar sagten Sie, dass Sie die spezifische URL kennen. Ich denke es isthttps://www.gstatic.com/generate_204
Die URL scheint client3.google.com/generate_204 zu sein . Informationen von dieser Seite für Chrom, die wahrscheinlich auch für Android gelten. chromium.org/chromium-os/chromiumos-design-docs/…
@Alex.S: Ich bin mir nicht sicher, ob es relevant ist, dies hier zu fragen, aber ich konnte keinen geeigneten Ort finden. Frage ist: Wie Sie sagten, gibt es mehrere Implementierungen von Captive Portal. Einige geben eine Umleitungs-URL mit einem HTTP-Statuscode als 200/3XX/511 zurück und einige geben eine HTML-Seite als solche zurück. Diese sind mir bekannt, aber ich wollte wissen, ob Sie einen Link gefunden haben, der die Arten/Methoden der Captive-Portal-Implementierung beschreibt. Kennen Sie Testsuiten, um zu überprüfen, ob die Captive-Portal-Erkennung alle Arten von Portalen abdeckt?

Ein Captive-Portal wird im Allgemeinen implementiert, indem der gesamte Datenverkehr an eine gültige HTTP-Antwort (200) geleitet wird. Diese HTTP-Antwort wird im Captive-Portal angezeigt.

Dies kann mit Tools wie iptables oder dnsmasq erfolgen.