Почему Android игнорирует мои изменения etc / hosts в браузере?

19

Я перемонтировал /sysкак rw, добавил одну запись etc/hosts(например 10.0.0.1 x.com www.x.com) и перезагрузил мое устройство.

После перезагрузки, если я проверю etc/hosts, запись в порядке. Если я пингую x.com, он пингует правильный IP-адрес, который я ввел.

Но если я открою веб-браузер (стандартный или Dolphin) и перейду к нему x.com, он перейдет на IP-адрес, к которому относится DNS.

Что происходит?

(Мой телефон - Nexus One, на котором установлена ​​кастомная ПЗУ Cyanogen 7.1 на базе Android 2.3.7)

Обновление:
в приложении « LAN Droid » я получаю отредактированный адрес (так 10.0.0.1) просто отлично. Похоже, что только браузеры ведут себя неправильно.

GCB
источник
Просто любопытно: а что если вы сделаете это наоборот, и вместо этого установите хорошо известный домен (или какой-нибудь рекламный сайт), чтобы стать localhost? Разве это не может загрузить это тогда? И действительно ли это такое короткое доменное имя, как в вашем примере? (Не такой уж забавный факт: Internet Explorer прекратил принимать файлы cookie для двухбуквенных доменов . Конечно, это не связано с вашей проблемой, но, возможно, короткие доменные имена имеют другие странные ограничения в некоторых браузерах? Думаю, что нет.)
Арджан
2
Вы можете сделать это - ls -l /etc/hostsвозможно, проблема с правами доступа / владением?
t0mm13b
@ t0mm13b "-rw-r - r-- root root"
gcb
@ t0mm13b ты на месте! В моем случае это были разрешения. chmod 644 /system/etc/hostsразобрался
KalenGi

Ответы:

6

Это звучит так же , как это , вплоть до пинг работы , но не в браузере. Его возможное решение приводится ниже:

Глупый вопрос, а вы редактируете файл на телефоне или просто толкаете файл, который вы разместили здесь? Тот, который вы опубликовали, имеет формат dos, поэтому в конце строки есть дополнительные символы перевода строки, которые могут запутать систему linux.

Я не знаю, что вы использовали для его изменения, но вы можете проверить, какой символ перевода строки / перевода строки он использует.

Egobits
источник
отредактировано с помощью vi на эмуляторе терминала. попытался форсировать ff=unixсейчас и set listувидеть любой разрыв строки в DOS ... даже пошел вперед и запустил регулярное выражение, как если бы был разрыв строки в DOS, ничего не найдено.
ГКБ
4

Не уверен, поможет ли это, но у меня была проблема с игнорируемым файлом хостов, и он был решен парнем из этого потока - ответ заключается в добавлении пустой новой строки в конец файла.

Флетч
источник
2

Можете ли вы установить strace и сравнить выходную строку strace на ping с strace в браузере, чтобы понять, почему DNS-запросы обрабатываются по-разному?

Вы уверены, что не происходит постоянного кэширования? Что такое TTL в записях вашего домена?

Похоже, что Android не использует /etc/resolv.conf, но, возможно, есть некоторые свойства, которые контролируют, какие приложения используют / etc / hosts, а какие обращаются непосредственно к поиску DNS. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI

Киран Талли
источник
хорошие моменты. TTL равен 1 ч, по умолчанию для правила catch all у меня есть. Поток g.groups в основном касается решения о том, какой сервер имен использовать во время DNS-запросов, эта логика происходит после etc / hosts. я надеюсь. Теперь я побежу по трассе (узнаю как раньше) и доложу.
ГКБ
2

Если вы создаете файл hosts на компьютере с Windows, убедитесь, что каждая строка разделена только LF (не [CR] [LF], только [LF]). Вы можете проверить это и создать надлежащие файлы hosts, используя notepad ++.

Том Теман
источник
0

Я думаю, что вам нужно сбросить DNS на вашем Android, проверьте этот вопрос /programming/2101762/android-flush-dns , особенно «зайдите в настройки -> приложения -> Расположение в сети -> Очистить данные».

Сообщество
источник
даже не имеет этой опции на Android 2.3.7. Но телефон с этим изменением в etc / hosts уже несколько месяцев. и я часто его перезагружаю ... надеюсь, DNS не кэшируется месяцами по любой причине.
ГКБ
0

Я подозреваю, что браузер настроен на работу через прокси.

Возможно, вы сможете с помощью netstat -n или узнать в / proc / net / tcp (или еще лучше / proc / # browser_pid # / net / tcp), к какому адресу он фактически подключается. Если это не соответствует адресу вашего сайта, скорее всего, вы проходите через посредника.

Крис Страттон
источник
-2

Обычно я бы сказал (но это не относится к вам, увы):

Просто попробуйте перезагрузиться, если изменения останутся незамеченными, потому что экземпляр компьютера Dalvik или базовая система могли кэшировать предыдущий запрос DNS.

Вы можете попробовать AdAway вручную добавить записи в ваш файл hosts (просто для перекрестной проверки, если он делает то же самое, что вы делали вручную).

CE4
источник