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

28

Wenn das Gerät versucht, eine Verbindung zu einem Access Point oder Router herzustellen, muss es sich auf der Seite des Captive-Portals mit der Meldung anmelden, dass die Verbindung hergestellt werden soll

Msgstr "Beim Wi - Fi - Netzwerk anmelden".

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

Sagar Vaghela
quelle

Antworten:

32

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

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

Für Kitkat wird clients3.google.com/generate_204 verwendet. Überprüfen Sie den Code AndroidXRef - KitKat 4.4.4_r1

RyanDH
quelle
Eigentlich ist dies eine viel bessere Antwort und sollte als die richtige Antwort markiert werden
Moataz Elmasry
Ich wollte die Antwort nicht entführen, indem ich sie bearbeitete, deshalb hinterlasse ich nur einen Kommentar. Es dauerte eine Weile, bis mir klar wurde, dass die Erkennungs-URL die Benachrichtigung auslöst, wenn sie nicht erreicht werden kann. Außerdem brauchte ich meinen Zugangspunkt, um auf diese Anfrage mit Inhalten zu antworten. In meinem Fall gab ich einen 200-Code sowie die Indexseite meines Webservers zurück, wenn / generate_204 angefordert wurde. Ohne Inhalt in der Antwort, unabhängig vom Rückkehrcode, würde ich eine Benachrichtigung "Wi-Fi hat keinen Internetzugang" erhalten.
Ubomb
@ubomb Scheint seltsam, da http://connectivitycheck.gstatic.com/generate_204tatsächlich eine 204 ohne Inhalt zurückgegeben wird und offensichtlich funktioniert. Vielleicht haben Sie den Content-Length: 0Header einfach weggelassen.
Tamir Daniely
9

Diese Technologie wird "Captive Portal" genannt. Es gibt mehrere Implementierungen. Wie ich weiß, versucht Android, auf eine Datei mit dem Namen generate_204eines der Google-Server zuzugreifen, und wenn dies nicht möglich ist, wird eine Benachrichtigung generiert.

Weiterführende Literatur auf Wikipedia: Captive_portal

Άνδρας
quelle
Eigentlich kenne ich mich mit Captive Portal aus. Aber ich kenne die spezifische URL, um sie zu überprüfen. Ich möchte wissen, wie es funktioniert. Nicht was es ist.
Sagar Vaghela
1
Was meinst du - "wie es funktioniert"? Android sendet eine Anfrage, und wenn keine positive Antwort eingeht, bedeutet dies, dass keine Verbindung zum Internet besteht und eine Benachrichtigung generiert wird. So funktioniert das.
15.
Welches ist die spezifische URL auf welcher Android-Anfrage. Ich habe in Frage erwähnt.
Sagar Vaghela
2
In Ihrem vorherigen Kommentar haben Sie gesagt, dass Sie die spezifische URL kennen. Ich denke es isthttps://www.gstatic.com/generate_204
--νδρας
2
Die URL scheint clients3.google.com/generate_204 zu sein . Informationen von dieser Seite für Chrom, die wahrscheinlich für Android gleich sind. chromium.org/chromium-os/chromiumos-design-docs/…
Benjamin
2

Ein Captive-Portal wird im Allgemeinen implementiert, indem der gesamte Verkehr zu einer gültigen HTTP-Antwort geleitet wird (200). Diese HTTP-Antwort wird im Captive-Portal angezeigt.

Dies kann mit Tools wie iptables oder dnsmasq erfolgen.

Jude Osborn
quelle