Как отслеживать сетевые звонки, сделанные с помощью iOS Simulator

Я пытаюсь отслеживать звонки из приложения на мой сервер, как это делает Firebug. Я не мог найти способ увидеть это в iOS Simulator или в xCode.

Есть ли способ сделать это, не нюхая весь трафик? Если нет, какой инструмент вы бы предложили?

18 ответов

Решение

Лично я использую Чарльза для такого рода вещей.
Когда он включен, он будет отслеживать каждый сетевой запрос, отображая расширенные детали запроса, включая поддержку SSL и различные форматы запросов / ответов, такие как JSON и т. Д.

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

Это коммерческое программное обеспечение, но есть пробная версия, и ИМХО, безусловно, отличный инструмент.

Прокси-посредник, как предлагают другие ответы, является хорошим решением, если вы хотите видеть только трафик HTTP/HTTPS. Burp Suite довольно хороший. Это может быть боль в настройке, хотя. Я не уверен, как вы убедите симулятора поговорить с ним. Возможно, вам придется настроить прокси на вашем локальном Mac на свой экземпляр прокси-сервера, чтобы он мог перехватывать, поскольку симулятор будет использовать среду вашего локального Mac.

Лучшее решение для сниффинга пакетов (хотя оно работает только на реальных устройствах iOS, а не на симуляторе), которое я нашел, это использовать rvictl, У этого блога есть хорошая рецензия. В основном вы делаете:

rvictl -s <iphone-uid-from-xcode-organizer>

Затем вы прослушиваете интерфейс, который он создает, с помощью Wireshark (или вашего любимого инструмента), и когда вы закончите, выключите интерфейс с помощью:

rvictl -x <iphone-uid-from-xcode-organizer>

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

Xcode обеспечивает ведение журнала диагностики CFNetwork. Apple Doc

Чтобы включить его, добавьте CFNETWORK_DIAGNOSTICS=3 в переменную окружения

Это покажет запросы от приложения с его заголовками и телом.

Недавно я нашел git-репо, который делает это легко.

Можешь попробовать.

Это скриншот приложения:

С наилучшими пожеланиями.

Бесплатный прокси-инструмент с открытым исходным кодом, который легко запускается на Mac, называется http://mitmproxy.org/.

Сайт содержит ссылки на двоичный файл Mac, а также исходный код на Github.

Документы содержат очень полезную информацию о загрузке сертификата в тестовое устройство для просмотра трафика HTTPS.

Не такой графический интерфейс, как у Чарльза, но он делает все, что мне нужно, бесплатно и поддерживается. Хороший материал и довольно простой, если вы уже использовали некоторые инструменты командной строки.

ОБНОВЛЕНИЕ: я только заметил на веб-сайте, что mitmproxy доступен как домашняя установка. Не может быть проще

как из Xcode 13вы можете отслеживать весь сетевой трафик со всеми его деталями, используя Xcode Instruments -> Network instrument. вам нужно физическое устройство под управлением iOS 15+

более подробную информацию можно найти в видеороликах « Анализ сетевого трафика в WWDC 2021».

Wireshark это

Выберите свой интерфейс

добавлять filter начать capture


тестирование

Нажмите на любое действие или кнопку, которая вызовет запрос GET/POST/PUT/DELETE

Вы увидите это в списке в Wireshark

Если вы хотите узнать больше информации об одном конкретном пакете, просто выберите его и следуйте> HTTP Stream.

надеюсь, это поможет другим!!

Для мониторинга https-запросов вам необходимо выполнить два общих шага:

Если вам просто нужно пошаговое руководство, перейдите к TLDR в конце.


  1. Настройте прокси-сервер «посредник» (например, Requestly, Charles или набор инструментов HTTP) и начните отправлять на него трафик.

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

Лучшим ( и более очевидным ) подходом было бы перехватывать и отслеживать трафик только из симулятора iOS.

Вы можете сделать это, отредактировав схему вашего проекта Xcode.

и определение двух переменныхhttp_proxyиhttps_proxy

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

Это все, что вам нужно сделать, если ваше приложение не использует шифрование (что, вероятно, так и есть), и в этом случае вам также придется обрабатывать шифрование.


  1. Использование самозаверяющего сертификата вашего прокси-сервера для шифрования запроса . Затем прокси-сервер сможет расшифровать и прочитать содержимое запросов, что позволит вам правильно отлаживать и отслеживать трафик вашего приложения.

Загрузите самозаверяющий корневой сертификат вашего инструмента проксирования внутри симулятора iOS. Большинство инструментов проксирования предоставляютhttpконечная точка, чтобы ее можно было легко добавить в симулятор после настройки прокси. Например,chls.pro/sslилиproxy.man/sslилиrequestly.io/ssl

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

Чтобы установить профиль после его загрузки, перейдите по ссылкеSettings > General > Device Management

Здесь вы увидите подробную информацию о загруженном профиле и возможность его установки.


Как только это будет сделано, вам необходимо включить доверие для вновь добавленного сертификата.

Для этого перейдите вSettings > About > Certificate Trust Settingsи включите доверие для загруженного сертификата

Теперь вы сможете отслеживать трафик http и https, и iOS не будет жаловаться на то, что происходит что-то вредоносное.

Отказ от ответственности и TLDR: я активно поддерживаю настольное приложение Requestly , и вот краткое пошаговое руководство по настройке мониторинга симулятора iOS с помощью Requestly — https://docs.requestly.io/guides/debugging-https-traffic-in-ios-симулятор

Кажется, это могло быть недавно добавлено. Щелкнувcommand + control + zна симуляторе появится меню отладки. В этом меню щелкнитеInspect. Inspect представит вкладки. Щелкните вкладку сети, на которой будут показаны все выполняемые сетевые запросы.

Если у вас есть кабельное соединение и Mac, то есть простой и мощный метод:

  1. установите бесплатный Wireshark, убедитесь, что он может захватывать устройства (и вам нужно делать это после каждой перезагрузки компьютера!):

    sudo chmod 644 / dev / bpf *

  2. Теперь поделитесь своей сетью с Wi-Fi. Системные настройки> Общий доступ> Общий Интернет. Убедитесь, что у вас есть "Поделиться своими подключениями из: Ethernet" и используя: Wi-Fi. Вы также можете настроить некоторую безопасность Wi-Fi, это не мешает вашему мониторингу данных.

  3. Подключите ваш телефон к вашей новой сети. Мне часто нужно несколько попыток здесь. Если телефон не хочет подключаться, включите Wi-Fi Mac, затем повторите шаг 2 выше и наберитесь терпения.

  4. Запустите Wireshark для захвата вашего беспроводного интерфейса с помощью Wireshark, это, вероятно, "en1". Отфильтруйте нужные IP-адреса и / или порты. Когда вы найдете интересный пакет, выберите его, щелкните правой кнопкой мыши (контекстное меню) > Follow TCP Stream, и вы увидите хорошее текстовое представление запросов и ответов.

И что самое лучшее: точно такой же трюк работает и для Android!

Telerik Fiddler - хороший выбор

http://www.telerik.com/blogs/using-fiddler-with-apple-ios-devices

FLEX - отличный инструмент для мониторинга сетевого трафика из вашего приложения iOS.

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

Однако у меня был случай использования, когда приложение, над которым я работал, перенаправляло пользователя в Safari. Я также хотел отслеживать сетевой трафик в Safari, но FLEX мог отслеживать трафик только из вашего приложения iOS, а не из любого другого приложения (на момент написания этого ответа).

Затем я переключился на Proxyman, чтобы отслеживать сетевой трафик из симулятора iOS.

  1. Установить WireShark
  2. получить IP-адрес от сетевого монитора xcode
  3. слушать интерфейс Wi-Fi
  4. установить фильтр ip.addr == 192.168.1.122 в WireShark

Я использую Netfox. Это очень легко использовать и интегрировать. Вы можете использовать его на симуляторе и устройстве. Он показывает все запросы и ответы. Он поддерживает JSON, XML, HTML, изображения и другие типы ответов. Вы можете обмениваться запросами, ответами и полным журналом с помощью стандартных форматов обмена IOS (Gmail, WhatsApp, электронная почта, slack, sms и т. Д.).

Вы можете проверить на GitHub: https://github.com/kasketis/netfox

Netfox обеспечивает быстрый просмотр всех выполненных сетевых запросов, выполняемых вашим приложением iOS или OSX. Он захватывает все запросы - конечно, ваши, запросы от сторонних библиотек (таких как AFNetworking, Alamofire или еще), UIWebViews и т. Д.

Вы также можете использовать эту библиотеку с открытым исходным кодом под названием Wormholy ( созданную мной).

Вам просто нужно интегрировать его в свой проект (код не требуется), и все, вы сможете отслеживать все запросы API вашего приложения, также на реальном устройстве.

И вам не нужно управлять сертификатами, как с Charles. Все работает по волшебству!

Хорошим решением, если вы привыкли к инструментам Chrome Inspector, является отладчик Pony: https://github.com/square/PonyDebugger

Это немного сложно для настройки, но как только вы это сделаете, это сработает хорошо. Обязательно используйте Safari вместо Chrome, чтобы использовать его.

Вы можете попробовать использовать https://github.com/BugBlock/BugBlock-iOS , это небольшой инструмент, который я создал, поэтому все, что вам нужно, это:

      import BugBlock

тогда

      var config = BBConfiguration()
config.consoleLoggingEnabled = false
config.serverLoggingEnabled = true
config.crashReportingEnabled = true
BBLog.start(appId: "SDK key", configuration: config)

и настроить сетевой перехватчик

      let conf = URLSessionConfiguration.default
BBLog.networkLogging(with: conf)
let session = URLSession(configuration: conf)

Затем используйте sessionв ваших запросах. Надеюсь, это поможет вам поймать журналы.

Другие вопросы по тегам