Как настроить сопоставление хоста с IP-адресом на Android без рута?

У меня есть веб-сайт, работающий на моем компьютере, и я хочу протестировать его на своем планшете Nexus 7. Т.е. по локальной сети WiFi. Если я ввожу IP-адрес, он подключается, но показывает неправильный веб-сайт, потому что я использую именованный виртуальный хостинг.

Итак, что я хочу сделать, так это иметь возможность ввести mysite.localChrome/Firefox на Nexus, заставить их преобразовать это 10.1.2.3(или любой другой локальный IP-адрес), а затем вызвать 10.1.2.3сервер, предоставляющий mysite.localхост для запроса.

Мой вопрос: есть ли на планшете Android 4.x /etc/hostsфайлы или их эквиваленты, которые я могу редактировать? (Без необходимости рутировать планшет или что-то в этом роде.)

На моих компьютерах с Linux я делаю это, добавляя запись в /etc/hosts:

10.1.2.3  mysite.local

(Или Windows\System32\drivers\etc\hostsна компьютере с Windows делает то же самое.)

Кстати, это полудубликат вручную установить имя хоста для IP-адреса (т.е. /etc/hosts эквивалент?) , но этот вопрос был для Android 2.2, где, по-видимому, это было невозможно. (Одна из альтернативных идей предполагала настройку DNS на локальном маршрутизаторе, но, насколько я могу судить, мой маршрутизатор не выполняет DNS локально, поэтому у него нет этой опции. Я мог бы настроить свой собственный DNS-сервер для этого, но это похоже на решение для большой работы.)

Это скорее вопрос к Server Fault или Super User . И вы должны настроить эти имена хостов на своем локальном сервере (который представлен вашим DHCP-сервером как DNS-узел).
@Izzy Спасибо, Иззи, но я знаю, как настроить /etc/hosts на серверах. Чего я не знаю, так это найти/отредактировать аналог на планшете с Android 4.x (или даже если есть аналог без рута). (Мой DHCP-сервер, то есть маршрутизатор Wi-Fi, по-видимому, не предлагает вариантов для добавления пользовательских имен: у меня есть возможность указать собственный DNS-сервер, но это грязный бассейн, в который я действительно не хотел вкладывать свои руки. )
Вы меня неправильно поняли, Даррен: я не предлагал редактировать /etc/hosts, а настраивать ваш «сервер имен» (например, DNSMasq или что вы используете). Ваш маршрутизатор может дать вам место для этого. /etc/hostsв противном случае необходимо редактировать на каждой машине — и соответствующий файл на Android можно редактировать только с «правами суперпользователя» (я не знаю его точного местоположения из головы, но он где-то внутри /data/systemAFAIR). См.: Как редактировать файл etc/hosts

Ответы (4)

Вы не можете просто редактировать файл hosts на Android, так как он находится в файловой системе только для чтения: /system/etc/hostsсм.

Альтернативы:

  • используйте DNS-сервер, такой как DNSMasq, в вашей локальной сети, чтобы позаботиться об этом «централизованно».
  • используйте «root полномочия» для принудительного редактирования системного файла, как описано выше.
  • установите «локальный DNS-сервер» на свое устройство Android, чтобы использовать его, например, DNS-сервер
Привет, Иззи, я пытался использовать DNS-сервер, чтобы справиться с этим, так как у меня нет root-доступа к моему телефону; Я добавил простое правило, которое перенаправляет имя хоста на рассматриваемый ip... но оно не работает... что я делаю не так?
DNS-сервер должен обслуживать другие устройства в вашей сети (как сказано в описании, для этого вам дополнительно необходимо использовать переадресацию портов). Это всегда требует, чтобы эти устройства (включая ваше устройство Android) были настроены на его использование. Я не использовал такой DNS-сервер на своих Android-устройствах, поэтому не проверял, что именно здесь нужно сделать; но, скорее всего, вам нужно настроить записи DNS в настройках вашей сети (нажмите и удерживайте запись сети WiFi, выберите «Дополнительно» и настройте первую запись DNS — оставьте вторую как есть для «резервной копии»).
@GeorgeKatsanos Вам может быть интересно это: stackoverflow.com/a/14211550/1768141

Как уже упоминал lzzy, для этого вы можете использовать сервер DNSMasq . Но Chrome использует собственный процесс разрешения DNS, и этот метод может не работать.

Для запуска сервера используйте следующую команду:

sudo /usr/local/sbin/dnsmasq -d \
                             --no-hosts \
                             --no-resolv \
                             --conf-file=/dev/null \
                             --server=8.8.8.8 --server=8.8.4.4 \
                             --address=/example.com/192.168.0.101
  • sudoтребуется привязка к порту 53
  • -dзапустить сервер на переднем плане
  • --no-hostsне использовать локальный файл hosts
  • --conf-file=/dev/nullне используйте какой-либо файл конфигурации
  • --server=8.8.8.8 --server=8.8.4.4адреса вышестоящих серверов (в данном примере Google DNS)
  • --address=/example.com/192.168.0.101хосты для переопределения. Вам нужно добавить свои хосты в эту строку. Вы также можете добавить туда несколько хостов.

Затем измените DNS-сервер на устройстве. Это легко сделать с помощью приложения DNS Changer .

После этих действий запросы к этим хостам должны отправляться на ваши адреса.

Самый простой способ определить сопоставление хоста с IP-адресом — это hostsфайл, так как в основном DNS-преобразователи учитывают этот файл . Но, как упоминалось в других ответах, невозможно редактировать /etc/hostsбез рутирования устройства Android. Доступ к веб-серверу с IP-адресом также не будет работать для вас из-за виртуального хостинга. Вот несколько вариантов, которые вы можете использовать на нерутированном устройстве:

  • Используйте приложение VPN, которое перехватывает DNS-трафик и ищет пользовательский hostsфайл перед выполнением запросов к настроенному вышестоящему DNS-серверу.
  • Запустите DNS-сервер; их можно настроить для возврата предопределенного IP-адреса для определенного имени. Например, если вы используете dnsmasq, добавьте address=/mysite.local/10.1.2.3в «dnsmasq.conf» . Или dnscrypt-proxyдобавить mysite.local 10.1.2.3в «cloaking-rules.txt» .
  • Настройте телефон на использование прокси или VPN, а затем добавьте запись 10.1.2.3 mysite.localв hostsфайл на прокси-сервере или запустите локальный DNS-сервер на VPN-сервере.
  • Если загрузчик разблокируется, отредактируйте hostsфайл из кастомного рекавери.

Для получения дополнительной информации см.: Как всегда разрешать доменное имя на фиксированный IP-адрес без рутирования?


СВЯЗАННЫЙ:

Вы не можете изменить файл в файловой системе только для чтения, но вы можете использовать bindопцию, чтобы заменить файл на расположенный в rw fs. Это должно работать только до следующей перезагрузки.

Пример:

mount /sdcard/hosts /etc/hosts -o bind
bind file /sdcard/hosts  to /etc/hosts
Хотя ответ правильный и соответствует подходу Magisk systemless, вопрос конкретно о нерутированных устройствах. Вы не можете запустить mountбез привилегий root. Ваш ответ больше подходит здесь: android.stackexchange.com/q/60150/218526