¿Cómo detecta WiFi en Android si el dispositivo tiene que iniciar sesión o no?

28

Cuando el dispositivo intenta conectarse a un punto de acceso o enrutador, debe iniciar sesión en la página del portal cautivo con el mensaje que dice

"Iniciar sesión en la red Wi-Fi".

¿Cómo identifica el punto de acceso / enrutador que se requiere un inicio de sesión para el dispositivo y cuál es el proceso detrás de él?

Sagar Vaghela
fuente

Respuestas:

32

La url de detección difiere entre las diferentes versiones de Android.

Para Marshmallow, utiliza connectcheck.gstatic.com/generate_204 , consulte el código aquí AndroidXRef - Marshmallow 6.0.0_r1

Para Kitkat, utiliza clients3.google.com/generate_204 verifica el código AndroidXRef - KitKat 4.4.4_r1

RyanDH
fuente
En realidad, esta es una respuesta mucho mejor y debe marcarse como la respuesta correcta
Moataz Elmasry
No quería secuestrar la respuesta editándola, así que solo dejaré un comentario. Me tomó un tiempo darme cuenta de que la URL de detección activa la notificación si no se puede alcanzar. Además, necesitaba mi punto de acceso para responder a esta solicitud con algún tipo de contenido; en mi caso, devolví un código 200 y la página de índice de mi servidor web cuando se solicitó / generate_204. Sin contenido en la respuesta, independientemente del código de retorno, recibiría una notificación de "Wi-Fi no tiene acceso a Internet".
ubomb
@ubomb Parece extraño, ya que en http://connectivitycheck.gstatic.com/generate_204realidad devuelve un 204 sin contenido, y obviamente funciona. Quizás acabas de dejar el Content-Length: 0encabezado.
Tamir Daniely
9

Esta tecnología se llama "portal cautivo". Hay varias implementaciones. Como sé, Android intenta alcanzar un archivo nombrado generate_204en uno de los servidores de Google y, si no es posible, se genera una notificación.

Lecturas adicionales en Wikipedia: Captive_portal

Άνδρας
fuente
En realidad sé sobre el portal cautivo. Pero sé la URL específica para verificarlo. Quiero saber cómo es el trabajo. No es lo que es.
Sagar Vaghela
1
¿Qué quieres decir con "cómo es el trabajo"? Android envía una solicitud y, si no hay una respuesta positiva, significa que no hay conexión a Internet y se genera una notificación. Asi es como funciona.
Sepνδρας
Cuál es la URL específica en la que se solicita Android. Tengo mención en cuestión.
Sagar Vaghela
2
En tu comentario anterior dijiste que conoces la URL específica. Creo que eshttps://www.gstatic.com/generate_204
Sepνδρας
2
La URL parece ser clients3.google.com/generate_204 . Información tomada de este sitio para el cromo, que probablemente sea la misma para Android. chromium.org/chromium-os/chromiumos-design-docs/…
benjamin
2

Un portal cautivo generalmente se implementa al dirigir todo el tráfico a una respuesta HTTP válida (200). Esta respuesta HTTP es lo que aparece en el portal cautivo.

Esto se puede hacer con herramientas como iptables o dnsmasq.

Jude Osborn
fuente