Parámetros del portal cautivo

Hay varios parámetros de portales cautivos que se pueden aplicar a un dispositivo Android a través settings put globalde los cuales el más famoso probablemente sea

settings put global captive_portal_detection_enabled 0

para desactivar completamente la verificación del portal cautivo (para Android < 8). ¿Alguien puede explicar cómo usar los otros, por ejemplo, para definir un "servidor de portal cautivo personalizado para láminas de estaño"? Por ejemplo, uno no puede simplemente hacer un

settings put global captive_portal_server example.com

ya que eso, en la mayoría de los casos, causaría que la verificación del portal cautivo fallara permanentemente (antecedentes: al hacerlo, la verificación del portal construiría una URL http://example.com/generate_204y la verificaría, esperando una respuesta específica).

Entonces, además de simplemente desactivar la verificación del portal cautivo por completo (lo que podría, como he leído, conducir a otros problemas como no ser redirigido al portal correcto en algunos casos), ¿qué más se puede hacer para mejorar la privacidad en este contexto?

Ejemplos (si los entendí bien):

  • captive_portal_mode(Android 8+?):
    • 0: No intente detectar portales cautivos
    • 1: solicitar al usuario que inicie sesión
    • 2: desconectarse inmediatamente de la red y no volver a conectarse a esa red en el futuro
  • captive_portal_detection_enabled(¿Android <8?):
    • 0: deshabilite completamente las comprobaciones del portal cautivo
    • 1: habilitarlo (predeterminado)

Si bien estos ejemplos son bastante sencillos: ¿Cómo usar los otros parámetros?

Respuestas (1)

Configuración del comportamiento del portal cautivo

  • captive_portal_detection_enabled(<=Android 7.1.1)
    • funciona como se describe en el cuerpo de la pregunta
  • captive_portal_mode(>=Android 7.1.2)
    • funciona como se describe en el cuerpo de la pregunta

Configuración de URL(s) de portal cautivo

  • captive_portal_server(<=Android 6.0.1)
    • El servidor que contiene una generate_204página, que se usa para crear internamente una URL para la detección de portales cautivos ( new URL("http", mServer, "/generate_204");obsoleto a partir de Android 7.0, ver más abajo)
  • captive_portal_use_https(>=Android 7.0)
    • 0: no use HTTPS para la validación de la red
    • 1: Usar HTTPS (predeterminado)
  • captive_portal_http_url(>=Android 7.0)
    • La URL utilizada para la detección del portal cautivo HTTP: utilícela junto con captive_portal_use_https(establecida en 0)
    • >= Android 7.1.1: el sistema operativo ya no se agrega generate_204a la URL automáticamente, lo que brinda cierta flexibilidad a la URL de entrada
  • captive_portal_https_url(>=Android 7.0)
    • La URL utilizada para la detección del portal cautivo de HTTPS: utilícela junto con captive_portal_use_https(establecida en 1)
    • >= Android 7.1.1: el sistema operativo ya no se agrega generate_204a la URL automáticamente

Requisito para que se utilice la URL

Se usa un código de respuesta HTTP 204 ("sin contenido") del servidor para la validación, no se necesita contenido adicional: tome la URL de detección predeterminada, por ejemplo, curl clients3.google.com/generate_204devuelve vacío e inspecciona la respuesta HTTP agregando --write-out %{http_code}devoluciones 204.'

Una pequeña lista de direcciones URL de servidores de portal cautivo utilizables en China continental (probado personalmente)

https://captive.v2ex.co/generate_204 (alojado por v2ex.com)

https://connect.rom.miui.com/generate_204 (alojado por Xiaomi, usado por defecto en MIUI)

https://noisyfox.cn/generate_204 (alojado por noisyfox.cn)

https://www.google.cn/generate_204 y https://developers.google.cn/generate_204 (alojado por Google)

https://www.qualcomm.cn/generate_204 (alojado por Qualcomm)

Notas adicionales

La fuente también menciona parámetros captive_portal_user_agent, captive_portal_fallback_urly captive_portal_other_fallback_urls:

  • captive_portal_fallback_url(>= Android 7.1.1) obviamente se supone que contiene una sola URL, mientras que
  • captive_portal_other_fallback_urlscontiene varias URL adicionales (lista separada por comas, por lo que es posible que las URL no contengan ninguna coma).

Pero personalmente realicé pruebas en Android 8.0.0 y ambos parámetros alternativos no funcionan. Asumiendo que son declaraciones sin una implementación por ahora.

Algunos ejemplos de configuraciones de portal cautivo de Android en China muestran el uso de algunas de las configuraciones anteriores:

la configuración de shell adb pone captive_portal_http_url global http://www.google.cn/generate_204
la configuración de shell adb pone captive_portal_https_url global https://www.google.cn/generate_204
la configuración de adb shell pone global captive_portal_fallback_url http://www.google.cn/generate_204
la configuración de shell de adb pone global captive_portal_other_fallback_urls http://www.qualcomm.cn/generate_204

Sabiendo eso, las "láminas de estaño" incluso podrían establecer su propio servicio de verificación. Con apache:

Motor de reescritura encendido
Reescribir Cond %{REQUEST_URI} /generar_204$
Regla de reescritura $ / [R=204,L]

o con Nginx:

ubicación / generar_204 {retorno 204; }

Referencias

1 , 2 (chino), 3 (chino)

Publicación relacionada , y al menos con MM, se usa el siguiente código: new URL("http", mServer, "/generate_204");(con mServerla inicialización captive_portal_serversi está configurado), por lo que este debería ser solo el nombre del servidor (o IP) allí (que probablemente fue una de las razones por las que falló para mí en un dispositivo MM). No estoy seguro de cuándo cambió, pero por lo que escribe probablemente con N. Para el 204, encontré esto , por lo que parece que asumí correctamente: solo el código 204, sin contenido.
@Izzy Desafortunadamente, las 2 opciones alternativas no parecen funcionar. Usar el valor predeterminado captive_portal_https_urly poner una URL accesible captive_portal_fallback_urlno elimina la marca de cruz, y lo mismo ocurre con la instalación captive_portal_other_fallback_urls: la configuración captive_portal_https_urldirecta es la única salida. Tenga en cuenta que las pruebas se realizan bajo LTE en lugar de WiFi, porque por alguna razón el WiFi de mi escuela siempre me dirigía al portal cautivo incluso si configuraba una URL completamente inválida.
Es posible que esos parámetros alternativos se hayan introducido con Oreo (tenga en cuenta que hemos analizado el código de Oreo para encontrarlos). Supongo que has comprobado Nougat, ¿verdad? // Buena idea incluir una pequeña lista de servidores. AFAIK también estaba g.cndisponible;)
@Izzy Oh, sí, no me di cuenta de eso, todavía no he flasheado ninguno de mis dispositivos con LOS15. Podría valer la pena echarle un vistazo, y si funciona, lo actualizaré y le enviaré un ping para limpiar los comentarios. Además, se dice que el certificado HTTPS de g.cn expiró en China continental, por lo que ya no se puede utilizar para HTTPS. // Pero espera... El código fuente 7.1.2 también contiene una referencia a captive_portal_fallback_url.
Al igual que con muchas funciones nuevas, a veces aparecen referencias antes de que se complete la función. Y el archivo al que se hace referencia define principalmente las constantes, no la funcionalidad, ¿verdad?
@Izzy Probado en un dispositivo LOS15, las opciones de respaldo aún no hacen nada. Supongo que esto lo sella por ahora.
Algunos detalles de Oreo aquí ; básicamente "cómo deshabilitar la verificación del portal cautivo". Curiosamente, el parámetro captive_portal_serverque comentaste como "<= MM" vuelve a entrar en juego aquí.