Configurando o comportamento do portal cativo
captive_portal_detection_enabled
(<= Android 7.1.1)
- funciona como descrito no corpo da pergunta
captive_portal_mode
(> = Android 7.1.2)
- funciona como descrito no corpo da pergunta
Definindo URL (s) do portal em cativeiro
captive_portal_server
(<= Android 6.0.1)
- O servidor que possui uma
generate_204
página, usado para criar internamente um URL para detecção de portal em cativeiro ( new URL("http", mServer, "/generate_204");
obsoleto a partir do Android 7.0, veja abaixo)
captive_portal_use_https
(> = Android 7.0)
0
: Não use HTTPS para validação de rede
1
: Use HTTPS (padrão)
captive_portal_http_url
(> = Android 7.0)
- O URL usado para a detecção de portal cativo HTTP - use em par com
captive_portal_use_https
(definido como 0
)
- > = Android 7.1.1: o sistema operacional não anexa mais
generate_204
ao URL automaticamente, dando flexibilidade ao URL de entrada
captive_portal_https_url
(> = Android 7.0)
- O URL usado para a detecção de portal cativo HTTPS - use em par com
captive_portal_use_https
(definido como 1
)
- > = Android 7.1.1: o sistema operacional não anexa mais
generate_204
ao URL automaticamente
Requisito para o URL ser usado
Um código de resposta HTTP 204 ("sem conteúdo") do servidor é usado para validação, sem necessidade de conteúdo extra: use o URL de detecção padrão, por exemplo, curl clients3.google.com/generate_204
retorne vazio e inspecione a resposta HTTP adicionando --write-out %{http_code}
retornos 204
. '
Uma pequena lista de URLs de servidor de portal cativo utilizáveis na China continental (testada pessoalmente)
https://captive.v2ex.co/generate_204 (hospedado por v2ex.com)
https://connect.rom.miui.com/generate_204 (hospedado pela Xiaomi, usado por padrão no MIUI)
https://noisyfox.cn/generate_204 (hospedado por noisyfox.cn)
https://www.google.cn/generate_204 & https://developers.google.cn/generate_204 (hospedado pelo Google)
https://www.qualcomm.cn/generate_204 (hospedado pela Qualcomm)
Notas adicionais
A fonte também menciona parâmetros captive_portal_user_agent
, captive_portal_fallback_url
e captive_portal_other_fallback_urls
:
captive_portal_fallback_url
(> = Android 7.1.1) obviamente deve conter um único URL, enquanto
captive_portal_other_fallback_urls
contém vários URLs adicionais (lista separada por vírgula, portanto, os URLs podem não conter vírgula).
Mas eu conduzi pessoalmente testes no Android 8.0.0, e ambos os parâmetros de fallback não funcionam. Supondo que sejam declarações sem uma implementação por enquanto.
Alguns exemplos de configurações de portal cativo do Android na China mostram o uso de algumas das configurações acima:
configurações de shell adb colocam captive_portal_http_url global http://www.google.cn/generate_204
as configurações do shell adb colocam global captive_portal_https_url https://www.google.cn/generate_204
as configurações do shell adb colocam global captive_portal_fallback_url http://www.google.cn/generate_204
as configurações do shell adb colocam global captive_portal_other_fallback_urls http://www.qualcomm.cn/generate_204
Sabendo disso, as "folhas de estanho" poderiam até criar seu próprio serviço de verificação. Com o Apache:
RewriteEngine On
RewriteCond% {REQUEST_URI} / generate_204 $
RewriteRule $ / [R = 204, L]
ou com Nginx:
localização / generate_204 {return 204; }
Referências
1 , 2 (chinês), 3 (chinês)
new URL("http", mServer, "/generate_204");
(mServer
sendo inicializado porcaptive_portal_server
se definido) - portanto, esse deve ser apenas o nome (ou IP) do servidor (que provavelmente foi um dos motivos pelos quais ele falhou) em um dispositivo MM). Não tenho certeza de quando foi alterado - mas pelo que você escreveu provavelmente com N. Para o 204, eu encontrei isso - então parece que assumi corretamente: apenas o código 204, sem conteúdo.