Por que o android ignora meus etc / hosts mudam no navegador?


19

Remontei /syscomo rw, adicionei uma entrada a etc/hosts(por exemplo 10.0.0.1 x.com www.x.com) e reiniciei meu dispositivo.

Após a reinicialização, se eu verificar etc/hosts, a entrada está correta. Se eu executar ping x.com, ele fará o ping do endereço IP correto que eu inseri.

Mas, se eu abrir um navegador da Web (estoque ou Dolphin), e procurar x.com, ele irá para o endereço IP que o DNS resolver.

O que está acontecendo?

(Meu telefone é um Nexus One, que está executando a ROM Cyanogen 7.1 personalizada, com base no Android 2.3.7)

Atualização:
No aplicativo ' LAN Droid ', recebo o endereço editado (também 10.0.0.1) também. Parece que são apenas os navegadores que se comportam de maneira errada.


Apenas curioso: e se você fizer o contrário, e definir um domínio conhecido (ou algum site de propaganda) para se tornar um host local? Falha ao carregar isso então? E é realmente um nome de domínio tão curto como o usado no seu exemplo? (Não é uma coisa tão divertida: o Internet Explorer parou de aceitar cookies para domínios de duas letras . Claro, não relacionado ao seu problema, mas talvez nomes de domínio curtos tenham outras limitações estranhas em alguns navegadores? Acho que não.)
Arjan

2
você pode fazer isso - ls -l /etc/hosts, possivelmente problema de permissões / propriedade?
t0mm13b

@ t0mm13b "-rw-r - r-- raiz raiz"
gcb

@ t0mm13b você está no local! No meu caso, foram as permissões. chmod 644 /system/etc/hostsresolvido
KalenGi

Respostas:


6

Isso soa exatamente como este , para baixo ao trabalho de ping, mas não o navegador. Sua solução final é citada abaixo:

Pergunta estúpida, mas você está editando o arquivo no aparelho ou apenas pressionando o arquivo que você postou aqui? O que você postou está no formato DOS, portanto, possui caracteres extras de alimentação de linha no final da linha que podem confundir um sistema Linux.

Não sei o que você usou para modificá-lo, mas convém verificar que tipo de caracteres de avanço de linha / nova linha está usando.


editado com vi no emulador de terminal. tentou forçar ff=unixagora e set listver qualquer quebra de linha do DOS ... até foi em frente e executou um regexp como se houvesse alguma quebra de linha do DOS, nada encontrado.
Gcb

4

Não tenho certeza se isso ajuda, mas eu tive um problema com um arquivo hosts ignorado e ele foi resolvido por um cara nesse tópico - a resposta é colocar uma nova linha em branco no final do arquivo.


2

Você pode instalar o strace e comparar a saída executando strace em ping com strace no navegador para ver por que as pesquisas de DNS estão sendo tratadas de maneira diferente?

Você tem certeza de que não há cache persistente em andamento? Qual é o TTL em seus registros de domínio?

O Android parece não usar o /etc/resolv.conf, mas talvez haja algumas propriedades que controlam quais aplicativos usam o / etc / hosts e quais vão diretamente para a pesquisa de DNS. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI


bons pontos. TTL é 1h, o padrão para a regra pegar todas as que tenho. O segmento g.groups é principalmente sobre a decisão de qual servidor de nomes atingir durante as consultas DNS, essa lógica ocorre após os etc / hosts. eu espero. Agora vou executar o strace (descobrir como fazer antes) e reportar de volta.
gcb 9/07/12

2

Se você estiver criando o arquivo hosts em uma máquina Windows, verifique se cada linha está separada apenas por um LF (não [CR] [LF], somente [LF]). Você pode verificar isso e criar arquivos de hosts adequados usando o bloco de notas ++.


0

Eu acho que você precisa liberar o DNS no seu Android. Verifique esta questão /programming/2101762/android-flush-dns , especialmente "vá para configurações -> aplicativos -> local da rede -> limpar dados".


nem sequer tem essa opção no android 2.3.7. Mas o telefone está com essa alteração no etc / hosts há meses. e eu o reinicializo frequentemente ... espero que o DNS não seja armazenado em cache por meses por qualquer motivo.
gcb

0

Minha suspeita seria que o navegador esteja configurado para funcionar através de um proxy.

Você pode dizer usando netstat -n ou procurando no / proc / net / tcp (ou melhor ainda, / proc / # browser_pid # / net / tcp) em qual endereço ele está realmente se conectando. Se isso não corresponder ao endereço do seu site, é provável que você esteja passando por um intermediário.


-2

Eu normalmente diria (mas isso não se aplica a você, infelizmente):

Apenas tente reiniciar se as alterações passarem despercebidas, porque a instância da máquina Dalvik ou o sistema subjacente pode ter armazenado em cache uma solicitação DNS anterior.

Você pode tentar o AdAway para adicionar manualmente entradas ao seu arquivo hosts (apenas para verificar se ele faz o mesmo que você fez manualmente).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.