Почему Proxyman — сын маминой подруги в мире снифферов

Всем привет, меня зовут Катя, я QA Engineering Manager в inDriver. В этой статье расскажу про свой опыт использования Proxyman, а также о том, почему считаю его лучшей программой-сниффером. Приятного чтения!  

image-loader.svgСодержание

Что мы хотим от снифферов?

Итак, что вообще такое «сниффер»? Снифферами называют инструменты, позволяющие перехватывать, анализировать и модифицировать все запросы, которые через них проходят. Они позволяют исследовать сетевое взаимодействие клиента и сервера (это, грубо говоря, высветляет наш черный ящик), а также эмулировать различные тестовые сценарии, модифицируя трафик.

Основной запрос к снифферам — мониторинг трафика. Нам необходимо знать, что происходит на сетевом уровне. Что мы проверяем? По пунктам:

  • Что запрос вообще уходит.

  • Блокирующий ли запрос — очень важно на старте приложения.

  • Время между действием и уходом запроса.

  • Правильно ли составлен запрос — URL, формат, параметры, данные. 

  • Что запрос не дублируется.

  • Что порядок отправляемых запросов верный.

  • Время ответа, тайм-аут и формат ответа.

Если мы будем видеть, на каком этапе произошла ошибка — фактически, баг локализован.

Принцип работы

Снифферы работают по принципу man in the middle. У нас есть промежуточный сервер, через который проходят запросы и ответы. Сниффер запускается на компьютере, который находится в той же локальной подсети, что и мобильное устройство с тестируемым приложением.

Как правило, соединение настраивается по Wi-Fi. В настройках Wi-Fi мобильного устройства в качестве прокси-сервера указывается IP-адрес компьютера и порт инструмента. IP-адрес можно узнать через командную строку (ifconfig) или в самом сниффере.

С HTTPS немного сложнее — нужно установить SSL-сертификат сниффера на устройство и разрешить девайсу доверять сертификату, чтобы трафик расшифровывался.

Но есть нюанс с SSL-пиннингом — процессом сверки полученного сертификата с вшитым в приложение. Если в вашем приложении есть SSL-пиннинг, потребуется обратиться к разработчикам для его отключения на тестовой версии приложения. Иначе не получится подсмотреть трафик приложения.

Выбор оптимального сниффера

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

1. Первый парень — Wireshark. Он низкоуровневый, поддерживает сотни протоколов — можно засниффать различные виды трафика: HTTP, VoIP, BLE и другие. С ним чувствуешь себя настоящим хакером, он кроссплатформенный и классный.

Минус — Wireshark не расшифровывает HTTPS-трафик в режиме реального времени. Сначала нужно записать пакеты, скормить ему их и сертификат — и тогда можно посмотреть трафик.

Знакомьтесь, WiresharkЗнакомьтесь, Wireshark

2. Следующий — Charles. Он мировая звезда, знаком тестировщикам, разработчикам и системным аналитикам. У него много функций, инструкций и статей. В том числе, на русском. Опять-таки, он кроссплатформенный.

Минус — в бесплатной версии выключается каждые полчаса.

Представим Charles такимПредставим Charles таким

3. Дальше — Fiddler. Здесь я рассматриваю классический Fiddler, не Fiddler Everywhere. Он резво работает на Windows, мне в нем безумно нравится, что между функциями можно переключаться парой кликов. Также плюсами назову регулярные выражения на подмены (Autoresponder) и довольно гибкий инструмент Scripting.

Минус — интерфейс у него немного гиковатый, и он работает только на Windows.

А вот и FiddlerА вот и Fiddler

Мини-бонус: мне в свое время настолько нравился Fiddler, что последний пункт не был для меня минусом: на рабочий макбук я поставила VirtualBox с виндой и настроенным в ней Fiddler«ом.

Выглядело это примерно такВыглядело это примерно так image-loader.svg

4. Гвоздь программы — Proxyman. Он хорош тем, что нативен на MacOS и использует все интерфейсные преимущества данной операционной системы. Proxyman молодой, развивающийся, к нему часто выходят новые версии. Он сделан так, чтобы быть интуитивно понятным.

Минус — в бесплатной версии обрезается количество возможных подмен и правил. А еще на винду его не поставить.

Украшение этой статьиУкрашение этой статьи

Есть, конечно, и другие снифферы: mitmproxy, Fiddler Everywhere, Burp Suite и так далее. Но они не настолько распространены среди QA-инженеров.

Почему Proxyman?  

Расскажу подробнее, чем же хорош Proxyman. Я поработала с ним примерно год и хочу поделиться с вами преимуществами этого инструмента.

1. Киллер-фича — инструкция буквально на каждый чих. Например, мы хотим установить сертификат на реальное iOS-устройство. Как это сделать? Жмем «Install certificate on iOS».

Идем дальше → Physical Devices — и перед нами инструкция, где буквально расписан каждый шаг, плюс ссылочка на траблшутинг, плюс запомните слово Atlantis — оно вам пригодится. Такая же инструкция есть на Android, также есть инструкция для разработчиков, как разрешить приложению использовать подменный сертификат.

Пример инструкции для AndroidПример инструкции для Android

2. Скрипт для эмуляторов и симуляторов. Если надо поставить сертификат на эмулятор и сниффать трафик с него — просто открываем Install certificate on Android → Emulators, жмякаем кнопочку Override Emulator, выполняется скрипт — готово.

Аналогично на iOS: Install certificate on iOS → Simulators, жмякнуть кнопочку Install and Trust, посмотреть, перезапустить эмулятор — done. Единственное, трафик эмуляторов будет считываться как отдельное устройство, а симуляторов — как приложение, его нужно поискать в списке приложений:

Эмулятор — в Remote devices, симулятор ищем по приложениюЭмулятор — в Remote devices, симулятор ищем по приложению

3. Возможность запинить домены, приложения, на которых необходимо сфокусироваться. Очень удобно, чтоб не потерять нужное в огромном числе реалтайм-запросов.

4. Группировка девайсов по IP, плюс возможность задать никнеймы. Можно не париться, от какого девайса запрос, кто и почему крашнулся. У нас все сгруппировано. Must have при мобильном тестировании на куче разных девайсов.

image-loader.svg

5. Группировка всех запросов по дереву. Вот у нас хосты, кликаем дальше, и по пути постепенно приходим к нужному запросу. Если хотим обратно переключиться на все запросы — кликаем на девайс, только на хост — кликаем хост. Это примерно также, как Structure в Charles, только на стероидах.

82b3ccd50531053af8a4ba4b15d5e7b6.jpg

6. Классный поиск. Во-первых, можно выбрать, по каким параметрам мы ищем: URL, запрос, тело, метод, даже цвет. Во-вторых, можно использовать разные параметры, в том числе,  мои любимые регулярки. Супер.

image-loader.svg

7. Скриптинг. Это использование JavaScript для каких-либо манипуляций. Здесь также есть регулярка, такие же фильтры.

Вот, например, здесь я сделала троттлинг на 5 секунд.Вот, например, здесь я сделала троттлинг на 5 секунд.

Либо вот, например, можно менять запросы/ответы. Это чем-то схоже с рерайтом в Charles — я подменяю заголовок или статус-код по правилу.

Хочу ок статус !Хочу ок статус !

Можно написать кучу всего по любым параметрам. Но код — казалось бы, сложно, непонятно, учить JavasScript, oh no! Ах, да, киллер-фича номер 1: кликаем Snippet Code, и вот у нас документация с готовыми кусочками кода на разные задачи, сгруппированная по категориям (вот ссылка на коллекцию этих кусочков).  

image-loader.svg

Подумала: может, я свихнулась на Proxyman? Всем рассказываю про него, многие коллеги уже на него перешли. Опросила разных людей — бывших коллег, разработчиков, тестировщиков. Мнения плюс-минус совпали: интерфейс удобный, достаточно резво работает, меньше ошибок, многое продумано.

Казалось бы, по плану все. Но есть кое-что еще.

Бонус 1

Ребята, которые пилят Proxyman, сделали клевый фреймворк для iOS. Он встраивается в приложение — чтобы засниффать трафик, не нужно каждый раз настраивать устройство, прописывать хост, ставить сертификат, разрешать его в одном месте, разрешать в другом…

Берешь девайс, в Proxyman находишь кнопочку «Найти девайс». Девайс и компьютер с поднятым на нем Proxyman должны находиться в одной сети — и все перехватывается само.

Правда, таким образом можно только инспектировать трафик: подменять запросы, ответы и прочие манипуляции не получится. Но это все равно экономит время, особенно с учетом того, что просмотр трафика — основной запрос к снифферам.

Бонус 2

Есть мобильная версия для iPhone! Заходим в AppStore, качаем. Работает через VPN-сертификат, настраиваем согласно инструкции — и можно смотреть трафик без компьютера.

Чтобы посмотреть, кликаем на запрос. Тело запроса вынесено в отдельный экран, потому что в мобильной версии неудобно, если все будет одной простыней. Также здесь можно запинить домены для удобства.

Опять же, доступен только мониторинг трафика, никаких модификаций сделать не получится. Зато плюс — лицензия с десктоп-версии включает в себя и лицензию на мобильную версию.

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

Спасибо, что дочитали статью до конца. Буду рада вашей обратной связи в комментариях.

© Habrahabr.ru