Я перемонтировал /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 Droid10.0.0.1
» я тоже отлично получаю отредактированный адрес (так ). Похоже, что это только браузеры, где он ведет себя неправильно.
Это звучит именно так , вплоть до работы пинга, но не браузера. Его возможное решение цитируется ниже:
Глупый вопрос, а вы файл редактируете на трубке или просто качаете файл, который выложили сюда? Тот, который вы разместили, находится в формате dos, поэтому в конце строки есть дополнительные символы перевода строки, которые могут запутать систему Linux.
Я не знаю, что вы использовали для его изменения, но вы можете проверить, какие символы перевода строки/новой строки он использует.
ff=unix
сейчас и set list
увидеть любой разрыв строки DOS ... даже пошел дальше и запустил регулярное выражение, как если бы был какой-либо разрыв строки DOS, ничего не нашел.Не уверен, поможет ли это, но у меня была проблема с игнорируемым файлом hosts, и ее решил парень в этой теме - ответ состоит в том, чтобы поместить пустую новую строку в конец файла.
Можете ли вы установить strace и сравнить результаты выполнения strace при пинге со strace в браузере, чтобы понять, почему запросы DNS обрабатываются по-разному?
Вы уверены , что не происходит постоянное кэширование? Какой TTL у записей вашего домена?
Android, похоже, не использует /etc/resolv.conf, но, возможно, есть некоторые свойства, которые определяют, какие приложения используют /etc/hosts, а какие идут непосредственно к поиску DNS. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI
Если вы создаете файл hosts на компьютере с Windows, убедитесь, что каждая строка разделена только LF (не [CR][LF], только [LF]). Вы можете проверить это и создать правильные файлы hosts с помощью notepad++.
Я думаю, вам нужно сбросить DNS на вашем Android, проверьте этот вопрос https://stackoverflow.com/questions/2101762/android-flush-dns , особенно «зайдите в настройки -> приложения -> Сетевое расположение -> Очистить данные».
Я подозреваю, что браузер настроен на работу через прокси.
Возможно, вы сможете сказать, используя netstat -n или просмотрев /proc/net/tcp (или, что еще лучше, /proc/#browser_pid#/net/tcp), к какому адресу он на самом деле подключается. Если это не совпадает с адресом вашего веб-сайта, скорее всего, вы пользуетесь услугами посредника.
Обычно я бы сказал (но к вам это, увы, не относится):
Просто попробуйте перезагрузиться, если изменения останутся незамеченными, потому что экземпляр машины Dalvik или базовая система могли кэшировать прежний DNS-запрос.
Вы можете попробовать AdAway вручную добавить записи в файл hosts (просто проверить, делает ли он то же самое, что и вы вручную).
Арьян
т0мм13б
ls -l /etc/hosts
возможно, проблема с разрешениями/правами собственности?gcb
КаленГи
chmod 644 /system/etc/hosts
разобрался