Сегодня, у меня возникла задача, отладить взаимодействие Android приложения, расположенного на моем смартфоне с локальным сервером, размещенном на ноутбуке. Данное решение, подойдет в первую очередь тем, кто много работает в дали от офиса, ведь приведенный ниже метод, позволяет обойтись без конфигурирования сетевого оборудования. Сгодится любая беспроводная сеть, пусть это будет хоть бортовая сеть Аэрофлота ).
Задачу можно было-бы решить простой правкой /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, в обойме повседневных рабочих инструментов.
Качаем программу с офсайта: 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.
После чего, Fiddler, сообщит о том, что собирается генерировать уникальный корневой сертификат. Соглашайтесь.
Затем Windows, запросит разрешение на добавление сертификата в систему.
На этом, пожалуй, все.
Программа Fiddler, имеет ряд недостатков, ключевой из которых, на первый взгляд, связана с тем, что Fiddler, устанавливает свой корневой сертификат, который (ясное дело, посылается подальше). И если добавление сертификата в "доверенные", решает эту проблему на десктопе, то с фашиствующим Гугловым и подданными детищами, сходу, договориться не выйдет. Нет, не то, чтобы совсем. Тот-же сайт, в исключение добавить можно, а вот при попытки проснифать трафик, из-под HSTS, увы...
Так-же, (лично у меня) Fiddler, отказался снифать защищенные пакеты WebSocket (wss://), причем, не только снифать, но даже открыть соединение с удаленным wss://, при включенной опции анализа HTTPS, мне не удалось, однако, при отключении контроля HTTPS в Tools->Options->HTTPS, вебсокетные соединения, проходят через прокси Fiddler, сквозняком.
В целом же, Fiddler, с возникшей у меня задачей проксирования, справился отлично, так-что, пока, на этом все. Если по ходу дела, что-то прояснится, нацарапаю продолжение.