Почему Proxyman — сын маминой подруги в мире снифферов
Всем привет, меня зовут Катя, я QA Engineering Manager в inDriver. В этой статье расскажу про свой опыт использования Proxyman, а также о том, почему считаю его лучшей программой-сниффером. Приятного чтения!
Содержание
Что мы хотим от снифферов?
Итак, что вообще такое «сниффер»? Снифферами называют инструменты, позволяющие перехватывать, анализировать и модифицировать все запросы, которые через них проходят. Они позволяют исследовать сетевое взаимодействие клиента и сервера (это, грубо говоря, высветляет наш черный ящик), а также эмулировать различные тестовые сценарии, модифицируя трафик.
Основной запрос к снифферам — мониторинг трафика. Нам необходимо знать, что происходит на сетевом уровне. Что мы проверяем? По пунктам:
Что запрос вообще уходит.
Блокирующий ли запрос — очень важно на старте приложения.
Время между действием и уходом запроса.
Правильно ли составлен запрос — URL, формат, параметры, данные.
Что запрос не дублируется.
Что порядок отправляемых запросов верный.
Время ответа, тайм-аут и формат ответа.
Если мы будем видеть, на каком этапе произошла ошибка — фактически, баг локализован.
Принцип работы
Снифферы работают по принципу man in the middle. У нас есть промежуточный сервер, через который проходят запросы и ответы. Сниффер запускается на компьютере, который находится в той же локальной подсети, что и мобильное устройство с тестируемым приложением.
Как правило, соединение настраивается по Wi-Fi. В настройках Wi-Fi мобильного устройства в качестве прокси-сервера указывается IP-адрес компьютера и порт инструмента. IP-адрес можно узнать через командную строку (ifconfig) или в самом сниффере.
С HTTPS немного сложнее — нужно установить SSL-сертификат сниффера на устройство и разрешить девайсу доверять сертификату, чтобы трафик расшифровывался.
Но есть нюанс с SSL-пиннингом — процессом сверки полученного сертификата с вшитым в приложение. Если в вашем приложении есть SSL-пиннинг, потребуется обратиться к разработчикам для его отключения на тестовой версии приложения. Иначе не получится подсмотреть трафик приложения.
Выбор оптимального сниффера
Давайте пройдемся по широко используемым в тестировании мобильных приложений инструментам.
1. Первый парень — Wireshark. Он низкоуровневый, поддерживает сотни протоколов — можно засниффать различные виды трафика: HTTP, VoIP, BLE и другие. С ним чувствуешь себя настоящим хакером, он кроссплатформенный и классный.
Минус — Wireshark не расшифровывает HTTPS-трафик в режиме реального времени. Сначала нужно записать пакеты, скормить ему их и сертификат — и тогда можно посмотреть трафик.
Знакомьтесь, Wireshark
2. Следующий — Charles. Он мировая звезда, знаком тестировщикам, разработчикам и системным аналитикам. У него много функций, инструкций и статей. В том числе, на русском. Опять-таки, он кроссплатформенный.
Минус — в бесплатной версии выключается каждые полчаса.
Представим Charles таким
3. Дальше — Fiddler. Здесь я рассматриваю классический Fiddler, не Fiddler Everywhere. Он резво работает на Windows, мне в нем безумно нравится, что между функциями можно переключаться парой кликов. Также плюсами назову регулярные выражения на подмены (Autoresponder) и довольно гибкий инструмент Scripting.
Минус — интерфейс у него немного гиковатый, и он работает только на Windows.
А вот и Fiddler
Мини-бонус: мне в свое время настолько нравился Fiddler, что последний пункт не был для меня минусом: на рабочий макбук я поставила VirtualBox с виндой и настроенным в ней Fiddler«ом.
Выглядело это примерно так
4. Гвоздь программы — Proxyman. Он хорош тем, что нативен на MacOS и использует все интерфейсные преимущества данной операционной системы. Proxyman молодой, развивающийся, к нему часто выходят новые версии. Он сделан так, чтобы быть интуитивно понятным.
Минус — в бесплатной версии обрезается количество возможных подмен и правил. А еще на винду его не поставить.
Украшение этой статьи
Есть, конечно, и другие снифферы: mitmproxy, Fiddler Everywhere, Burp Suite и так далее. Но они не настолько распространены среди QA-инженеров.
Почему Proxyman?
Расскажу подробнее, чем же хорош Proxyman. Я поработала с ним примерно год и хочу поделиться с вами преимуществами этого инструмента.
1. Киллер-фича — инструкция буквально на каждый чих. Например, мы хотим установить сертификат на реальное iOS-устройство. Как это сделать? Жмем «Install certificate on iOS».
Идем дальше → Physical Devices — и перед нами инструкция, где буквально расписан каждый шаг, плюс ссылочка на траблшутинг, плюс запомните слово Atlantis — оно вам пригодится. Такая же инструкция есть на Android, также есть инструкция для разработчиков, как разрешить приложению использовать подменный сертификат.
Пример инструкции для Android
2. Скрипт для эмуляторов и симуляторов. Если надо поставить сертификат на эмулятор и сниффать трафик с него — просто открываем Install certificate on Android → Emulators, жмякаем кнопочку Override Emulator, выполняется скрипт — готово.
Аналогично на iOS: Install certificate on iOS → Simulators, жмякнуть кнопочку Install and Trust, посмотреть, перезапустить эмулятор — done. Единственное, трафик эмуляторов будет считываться как отдельное устройство, а симуляторов — как приложение, его нужно поискать в списке приложений:
Эмулятор — в Remote devices, симулятор ищем по приложению
3. Возможность запинить домены, приложения, на которых необходимо сфокусироваться. Очень удобно, чтоб не потерять нужное в огромном числе реалтайм-запросов.
4. Группировка девайсов по IP, плюс возможность задать никнеймы. Можно не париться, от какого девайса запрос, кто и почему крашнулся. У нас все сгруппировано. Must have при мобильном тестировании на куче разных девайсов.
5. Группировка всех запросов по дереву. Вот у нас хосты, кликаем дальше, и по пути постепенно приходим к нужному запросу. Если хотим обратно переключиться на все запросы — кликаем на девайс, только на хост — кликаем хост. Это примерно также, как Structure в Charles, только на стероидах.
6. Классный поиск. Во-первых, можно выбрать, по каким параметрам мы ищем: URL, запрос, тело, метод, даже цвет. Во-вторых, можно использовать разные параметры, в том числе, мои любимые регулярки. Супер.
7. Скриптинг. Это использование JavaScript для каких-либо манипуляций. Здесь также есть регулярка, такие же фильтры.
Вот, например, здесь я сделала троттлинг на 5 секунд.
Либо вот, например, можно менять запросы/ответы. Это чем-то схоже с рерайтом в Charles — я подменяю заголовок или статус-код по правилу.
Хочу ок статус !
Можно написать кучу всего по любым параметрам. Но код — казалось бы, сложно, непонятно, учить JavasScript, oh no! Ах, да, киллер-фича номер 1: кликаем Snippet Code, и вот у нас документация с готовыми кусочками кода на разные задачи, сгруппированная по категориям (вот ссылка на коллекцию этих кусочков).
Подумала: может, я свихнулась на Proxyman? Всем рассказываю про него, многие коллеги уже на него перешли. Опросила разных людей — бывших коллег, разработчиков, тестировщиков. Мнения плюс-минус совпали: интерфейс удобный, достаточно резво работает, меньше ошибок, многое продумано.
Казалось бы, по плану все. Но есть кое-что еще.
Бонус 1
Ребята, которые пилят Proxyman, сделали клевый фреймворк для iOS. Он встраивается в приложение — чтобы засниффать трафик, не нужно каждый раз настраивать устройство, прописывать хост, ставить сертификат, разрешать его в одном месте, разрешать в другом…
Берешь девайс, в Proxyman находишь кнопочку «Найти девайс». Девайс и компьютер с поднятым на нем Proxyman должны находиться в одной сети — и все перехватывается само.
Правда, таким образом можно только инспектировать трафик: подменять запросы, ответы и прочие манипуляции не получится. Но это все равно экономит время, особенно с учетом того, что просмотр трафика — основной запрос к снифферам.
Бонус 2
Есть мобильная версия для iPhone! Заходим в AppStore, качаем. Работает через VPN-сертификат, настраиваем согласно инструкции — и можно смотреть трафик без компьютера.
Чтобы посмотреть, кликаем на запрос. Тело запроса вынесено в отдельный экран, потому что в мобильной версии неудобно, если все будет одной простыней. Также здесь можно запинить домены для удобства.
Опять же, доступен только мониторинг трафика, никаких модификаций сделать не получится. Зато плюс — лицензия с десктоп-версии включает в себя и лицензию на мобильную версию.
Подытоживая, подчеркну, что мониторинг трафика суперважен. Он спасает жизни, продукт от багов, разрабов от долгих попыток разобраться в причинах ошибок. Proxyman же делает данный процесс более удобным.
Спасибо, что дочитали статью до конца. Буду рада вашей обратной связи в комментариях.