Parâmetros do Portal Cativo

10

Existem vários parâmetros de portal cativos que podem ser aplicados a um dispositivo Android via settings put global- o mais famoso provavelmente

settings put global captive_portal_detection_enabled 0

desativar completamente a verificação de portal em cativeiro (para Android <8). Alguém pode explicar como usar os outros - por exemplo, para definir um "servidor de portal cativo personalizado para papel alumínio"? Por exemplo, não se pode simplesmente fazer uma

settings put global captive_portal_server example.com

como isso, na maioria dos casos, causaria uma falha permanente na verificação cativa do portal (segundo plano: fazendo isso, a verificação do portal criaria uma URL http://example.com/generate_204e a verificação, esperando uma resposta específica).

Portanto, além de simplesmente desativar completamente a verificação de portal cativo (o que, como eu li, pode levar a outros problemas, como não ser redirecionado para o portal correto em alguns casos), o que mais podemos fazer para melhorar a privacidade nesse contexto?

Exemplos (se eu acertar):

  • captive_portal_mode (Android 8 ou superior?):
    • 0: Não tente detectar portais em cativeiro
    • 1: Solicita que o usuário faça login
    • 2: Desconecte imediatamente da rede e não reconecte a essa rede no futuro
  • captive_portal_detection_enabled (Android <8?):
    • 0: Desabilite completamente as verificações do portal cativo
    • 1: Ativar (padrão)

Embora esses exemplos sejam bem diretos: como usar os outros parâmetros?

Izzy
fonte

Respostas:

12

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_204pá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_204ao 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_204ao 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_204retorne 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_urle 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)

Andy Yan
fonte
11
Post relacionado - e pelo menos com MM, o código a seguir é usado: new URL("http", mServer, "/generate_204");( mServersendo inicializado por captive_portal_serverse 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.
Izzy
@ Izzy Infelizmente, as 2 opções de fallback parecem não funcionar. Usar o padrão captive_portal_https_urle inserir um URL acessível captive_portal_fallback_urlnão elimina a marca cruzada, e o mesmo vale para inserir captive_portal_other_fallback_urls- Definir captive_portal_https_urlstraight é a única saída. Observe que os testes são realizados no LTE, e não no WiFi, porque, por algum motivo, o WiFi da minha escola sempre me direcionava para o portal cativo, mesmo que eu definisse um URL completamente inválido.
Andy Yan
Esses parâmetros de fallback podem ter sido introduzidos no Oreo (observe o código do Oreo para encontrá-los). Acho que você conferiu o Nougat, certo? // Boa idéia para incluir uma pequena lista de servidores. AFAIK também estava g.cndisponível;)
Izzy
11
@ Izzy Ah, sim, não percebi isso, ainda não atualizei nenhum dos meus dispositivos com o LOS15. Pode valer a pena conferir e, se funcionar, atualizarei e efetuarei ping para limpar os comentários. Além disso, o certificado HTTPS de g.cn expirou no continente, portanto, não é mais utilizável para HTTPS. // Mas espere ... O código-fonte 7.1.2 também contém referência captive_portal_fallback_url.
Andy Yan
Como em muitos novos recursos, às vezes as referências aparecem antes que o recurso seja concluído. E o arquivo referenciado define principalmente as constantes, não a funcionalidade, certo?
Izzy