Найти в Дзене
DonMazay

Отладка Android мобильного веб-приложения в локальной сети

Сегодня, у меня возникла задача, отладить взаимодействие Android приложения, расположенного на моем смартфоне с локальным сервером, размещенном на ноутбуке. Данное решение, подойдет в первую очередь тем, кто много работает в дали от офиса, ведь приведенный ниже метод, позволяет обойтись без конфигурирования сетевого оборудования. Сгодится любая беспроводная сеть, пусть это будет хоть бортовая сеть Аэрофлота ). Задачу можно было-бы решить простой правкой /system/etc/hosts файла Андроида, перенаправив обращения веб приложения на локальный сервер, но разработчики персональных гаджетов, давно дают бой самодеятельности пользователей и всеми средствами запрещают доступ к правкам системных файлов своей профанированной операционной системы. Конечно, можно было бы заполучить root права на смартфоне, но по ряду вполне объективных причин, я не рутую свой смартфон, потому, этот метод откинул сразу. Разворачивать в домашней сети, локальный DNS, это перебор. Бортовые средства маршрутизат

Сегодня, у меня возникла задача, отладить взаимодействие Android приложения, расположенного на моем смартфоне с локальным сервером, размещенном на ноутбуке. Данное решение, подойдет в первую очередь тем, кто много работает в дали от офиса, ведь приведенный ниже метод, позволяет обойтись без конфигурирования сетевого оборудования. Сгодится любая беспроводная сеть, пусть это будет хоть бортовая сеть Аэрофлота ).

-2

Задачу можно было-бы решить простой правкой /system/etc/hosts файла Андроида, перенаправив обращения веб приложения на локальный сервер, но разработчики персональных гаджетов, давно дают бой самодеятельности пользователей и всеми средствами запрещают доступ к правкам системных файлов своей профанированной операционной системы. Конечно, можно было бы заполучить root права на смартфоне, но по ряду вполне объективных причин, я не рутую свой смартфон, потому, этот метод откинул сразу. Разворачивать в домашней сети, локальный DNS, это перебор. Бортовые средства маршрутизатора, тоже не позволили решить задачу. Да и не всегда это возможно.

Было принято решение поднять прокси сервер, на той-же машине, на которой паркуется весь мой back-end . Ведь, штатные средства настроек беспроводного, сетевого соединения в Android, позволяют направлять трафик, через прокси.

Итак, приступим.

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

  Для того, чтобы быстро узнать свой IP, из под Окошек, в консоли, командуем ipconfig и в строке, IPv4-адрес. . . . . . . . . . . . : 192.168.0.101, получаем свой локальный сетевой адрес. Под Пингвинами, ifconfig или ip addr, но *nix’оиды, как правило, в курсе). В качестве порта прокси, можно использовать любой свободный порт. Настройки на моем телефоне, выглядят следующим образом:

Настройка смартфона
Настройка смартфона

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

Здесь, следует учитывать тот факт, что, при использовании DHCP в вашей сети, настройка прокси, будет время от времени отваливаться, так-как ip вашего компьютера, будет периодически меняться роутером.

Теперь, приступим к настройке прокси сервера.

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

Интерфейс Fiddler
Интерфейс Fiddler

Качаем программу с офсайта: https://www.telerik.com/download/fiddler

Так-же, существует версия для Linux и Фрукта, которые на текущий момент, имеют статус beta и лично мной не тестировались: https://www.telerik.com/download/fiddler-everywhere

После установки и запуска программы, заходим в меню Tools->Options-> Connections.

Чекаем «Allow remote computers to connect» (разрешить подключение удаленных компьютеров), указываем слушать порт, указанный в настройке смартфона (в данном примере, указывали 8081). На этом, пожалуй, все. Теперь, весь HTTP трафик, будет идти не на напрямую, к основному шлюзу вашей сети, а через прокси Fiddler’а.

Настройки прокси
Настройки прокси

Таким образом, HTTP пакеты, отправленные с мобильного телефона, проходя через прокси Fiddler'а, будут перенаправляться операционной системой, согласно настройкам hosts, на нужный хост и подхватываться вашими серверами. Это значит, что OpenServer, XAMPP, Denver и др., будут работать из коробки.

Для отлова HTTPS трафика, нужно включить соответственную функцию в Tools->Options->HTTPS.

Настройки перехвата шифрованного HTTP трафика
Настройки перехвата шифрованного HTTP трафика

После чего, Fiddler, сообщит о том, что собирается генерировать уникальный корневой сертификат. Соглашайтесь.

Генерация корневого сертификата
Генерация корневого сертификата

Затем Windows, запросит разрешение на добавление сертификата в систему.

Установка корневого сертификата.
Установка корневого сертификата.

На этом, пожалуй, все.

Программа Fiddler, имеет ряд недостатков, ключевой из которых, на первый взгляд, связана с тем, что Fiddler, устанавливает свой корневой сертификат, который (ясное дело, посылается подальше). И если добавление сертификата в "доверенные", решает эту проблему на десктопе, то с фашиствующим Гугловым и подданными детищами, сходу, договориться не выйдет. Нет, не то, чтобы совсем. Тот-же сайт, в исключение добавить можно, а вот при попытки проснифать трафик, из-под HSTS, увы...

Google Chrome, разрыв соединения.
Google Chrome, разрыв соединения.

Так-же, (лично у меня) Fiddler, отказался снифать защищенные пакеты WebSocket (wss://), причем, не только снифать, но даже открыть соединение с удаленным wss://, при включенной опции анализа HTTPS, мне не удалось, однако, при отключении контроля HTTPS в Tools->Options->HTTPS, вебсокетные соединения, проходят через прокси Fiddler, сквозняком.

В целом же, Fiddler, с возникшей у меня задачей проксирования, справился отлично, так-что, пока, на этом все. Если по ходу дела, что-то прояснится, нацарапаю продолжение.