Перенаправление HTTP запросов с эмулятора Android на локальный компьютер
Занимаясь разработкой сетевых игр под Android столкнулся с такой проблемой - эмулятор андройда ни как не хочет воспринимать hosts локального компьютера, то есть, к примеру, перенаправить запросы с эмулятора на домен example.com на свой локальный web-сервер не получается через hosts-файл.
В интернете находил несколько вариантов решения проблемы: прописать переназначение адреса в hosts файл эмулятора, поменять записи в базе данных эмулятора через шел и т.п. Все испробованные варианты не приводили ни к чему - программа в эмуляторе упорно лезла в интернет (по-правде говоря, некторые из способов срабатывали, но только для Android-браузера, что меня ни как не устраивало).
После нескольких дней мучений пришел к решению описанному ниже.
Эмулятор андройда не использует системный файл hosts, о чем явно написано в мануале (http://developer.android.com/guide/developing/tools/emulator.html#emulatornetworking ):
On Windows, the emulator obtains the addresses by calling the GetNetworkParams() API. Note that this usually means that the emulator <b>ignores</b> the content of your "hosts" file (/etc/hosts on Linux/OS X, %WINDOWS%/system32/HOSTS on Windows)
Не хочет - не надо, идем другим путем, который подсказан там же в мануале. По умолчанию эмулятор проверяет определенные IP адреса при старте, в нашем случае интересны адреса 10.0.2.3-6:
10.0.2.3 First DNS server 10.0.2.4 / 10.0.2.5 / 10.0.2.6 Optional second, third and fourth DNS server (if any)
то есть это адреса, где эмулятор при запуске ищет DNS сервера. То что нам и надо - мы сможем подменить системный ДНС на свой и направить Android эмулятор туда куда нам нужно.
Выполняем следующие шаги.
1) Устанавливаем «адаптер Майкрософт замыкания на себя», проще говоря виртуальный сетевой интерфейс по инструкции на странице http://support.microsoft.com/kb/839013
2) Меняем его настройки TCP/IP на следующие:
IP address: 10.0.2.3 Subnet mask: 255.0.0.0 Default gateway: берем из настроек физического сетевого интерфейса на локальной машине DNS servers: берем из настроек физического сетевого интерфейса на текущей машине (не обязательно, но это должно исключить обращение на наш DNS сервер запросов не из эмулятора)
3) Ставим DNS сервер, я ставил smallhttpd (http://smallsrv.com/ ), но на его установщик временами ругался антиврус, что там кейлогер, хотя на установленные файлы он не ругался. Выбор за вами, далее я буду описывать относительно smallhttpd.
4) Настраиваем разименовывание адресов в DNS сервере. Пример для smallhttpd:
Создаем файл hosts в каталоге, где установлен сервер, следующего содержания:
10.13.1.5 example.com # указываем другие адреса если необходимо #... # следующие строки нужны для использования основного ДНС сервера, # чтобы правильно разыменовывались все остальные запросы . IN NS a.root-servers.net a.root-servers.net IN A 10.13.0.3
где 10.13.1.5 – это ваш реальный локальный IP адрес, использовать 127.0.0.1 нельзя, т.к. эмулятор такой IP адрес воcпримет как локальный для самого себя и HTTP запросы вообще ни куда не уйдут.
example.com - адрес сайта, с которым мы хотим работать локально.
10.13.0.3 – адрес ДНС сервера который используется на компьютере, если не знаете какой адрес используется вместо
. IN NS a.root-servers.net a.root-servers.net IN A 10.13.0.3
можете указать список корневых ДНС серверов:
. IN NS a.root-servers.net a.root-servers.net IN A 198.41.0.4 . IN NS b.root-servers.net b.root-servers.net IN A 128.9.0.107 . IN NS c.root-servers.net c.root-servers.net IN A 192.33.4.12 . IN NS d.root-servers.net d.root-servers.net IN A 128.8.10.90 . IN NS e.root-servers.net e.root-servers.net IN A 192.203.230.10 . IN NS f.root-servers.net f.root-servers.net IN A 192.5.5.241 . IN NS g.root-servers.net g.root-servers.net IN A 192.112.36.4 . IN NS h.root-servers.net h.root-servers.net IN A 128.63.2.53
5) Запускаем smallhttpd сервер, открываем настройки, в меню выбираем в меню пункт DNS и меняем настройки:
-Убираем галку Disable DNS server
-Выбираем созданный хост файл
-Убираем галку Disable recursion
-Отмечаем Bind to all address (либо можно указать ip виртуального интерфейса 10.0.2.3)
- остальные параметры по умолчанию
Пример настроек:
Нажимаем в меню OK, перезапускаем сервер через контекстное меню в трее.
В окне лога должно появится сообщение вида:
DNS is enable. 2 hosts now are loaded.
Вместо значения 2 может быть другое число в зависимости от содержания файла hosts.
6) Запускаем эмулятор. Запускаем в эмуляторе браузер, пробуем зайти на example.com (не забываем что локальный вебсервер должен быть настроен на использование этого адреса). Если всё открылось и в окне лога сервера появилось сообщение вида
!->07/05 13:03:17 [10.13.1.5:2432>53] (t0 8) >example.com A(1)
значит всё работает, пробуем тестировать программу, которую нужно было направить на локальный веб-сайт.
Как всегда - вопросы и предложения приветствуются.
Комментарии
Hello, did you know that there are 241,120 internet directories in the world.
These websites are what drive traffic to YOUR business.
Want more traffic? Want more Sales? We can help - today.
Your website galanov.net is listed in only 31 of these directories.
Get more traffic for your Global audience.
Our automated system adds your website to all of the directories.
You can find it here: getlisted.directory/galanov.net
Act today, and we will expedite your listings and waive the processing charge!
We have a special going on. Use "FRIENDS" on checkout for a 50% discount valid today.
https://mega.nz/file/aMZz2aqJ#7PQ2VfqchQqOP1U5Up74YP67b6Eo_JHVDLzpa4zyjeA
Отправить комментарий