Всем привет, меня зовут Катя, я 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
Знакомьтесь, Wireshark

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

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

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

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

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

А вот и Fiddler
А вот и 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
Пример инструкции для 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 при мобильном тестировании на куче разных девайсов.

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

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

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

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

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

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

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

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

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

Бонус 1

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

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

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

Бонус 2

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

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

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

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

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

Комментарии (10)


  1. printf
    30.11.2021 16:29
    +3

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


    1. NateF
      01.12.2021 04:44
      +2

      Спасибо за наводку)


  1. chemtech
    30.11.2021 18:10

    Спасибо за пост. Подскажите, пожалуйста, если знаете сниффер/прокси, который бы записывал только request.header, response.header, записывал ip источника, ip получателя. В Openshift как sidecar контейнер я его сам добавляю. Я нарисовал простую схему для понимания. Заранее спасибо.


  1. Krivitskiy_Anton
    30.11.2021 18:52
    +1

    Почему Proxyman? 

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

    То есть, тут подразумевались преимущества Proxyman над другими снифферами, насколько я понял. Но при этом:

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

    П. 3 и 5 тоже вполне чарльз покрывает и регулярки он тоже поддерживает.

    Плюс есть Throttling, Mirror, который может помочь сделать моковые данные. И Map Remote/Local уже фича для более редких кейсов использования.

    И как уже написано в статье - он кроссплатформенный, а то не все работают на маках.

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

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


    1. thedrugsthatdeceiveyou Автор
      30.11.2021 19:02
      +2

      в чарльзе инструкции на сайте, а в проксимане внутри программы, то есть не понадобится отдельно гуглить


      1. Krivitskiy_Anton
        30.11.2021 19:06

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

        Мб это и плюс, но не тянет на аргумент в пользу смены инструмента.

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


        1. thedrugsthatdeceiveyou Автор
          30.11.2021 19:21
          +1

          это лишь причины выбора инструмента, у всех свои запросы)

          спасибо!


    1. stAnger917
      02.12.2021 10:13

      да, соглашусь, поиск в чарльзе мне тоже не нравится


  1. stAnger917
    01.12.2021 22:22

    Каждому свое, конечно же) раньше пользовался Fiddler - но потом пересел на макбук - и тут использую только Proxyman - в Чарльзе мне не нравился интерфейс, да и каждые пол часа перезапускать его - то еще удовольствие)

    А касательно минусов Proxyman - работаю одновременно на двух проектах - в целом, мне хватает того лимита что там есть)


  1. Rilchuk
    05.12.2021 22:21

    Убедила) попробую вместо mitmproxy.