Как отслеживать сетевые звонки, сделанные с помощью 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 в переменную окружения
Это покажет запросы от приложения с его заголовками и телом.
Бесплатный прокси-инструмент с открытым исходным кодом, который легко запускается на 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 в конце.
- Настройте прокси-сервер «посредник» (например, Requestly, Charles или набор инструментов HTTP) и начните отправлять на него трафик.
Вы можете использовать инструменты, которые прослушивают весь трафик вашей системы, но, по моему опыту, в итоге вы получаете слишком много журналов, которые вы не знаете, как перемещаться и фильтровать.
Лучшим ( и более очевидным ) подходом было бы перехватывать и отслеживать трафик только из симулятора iOS.
Вы можете сделать это, отредактировав схему вашего проекта Xcode.
и определение двух переменныхhttp_proxy
иhttps_proxy
Установите их соответствующим образом, чтобы отправлять весь трафик на ваш прокси. Большинство из них всегда упоминают IP и порт, на котором работает их прокси.
Это все, что вам нужно сделать, если ваше приложение не использует шифрование (что, вероятно, так и есть), и в этом случае вам также придется обрабатывать шифрование.
- Использование самозаверяющего сертификата вашего прокси-сервера для шифрования запроса . Затем прокси-сервер сможет расшифровать и прочитать содержимое запросов, что позволит вам правильно отлаживать и отслеживать трафик вашего приложения.
Загрузите самозаверяющий корневой сертификат вашего инструмента проксирования внутри симулятора 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, то есть простой и мощный метод:
установите бесплатный Wireshark, убедитесь, что он может захватывать устройства (и вам нужно делать это после каждой перезагрузки компьютера!):
sudo chmod 644 / dev / bpf *
Теперь поделитесь своей сетью с Wi-Fi. Системные настройки> Общий доступ> Общий Интернет. Убедитесь, что у вас есть "Поделиться своими подключениями из: Ethernet" и используя: Wi-Fi. Вы также можете настроить некоторую безопасность Wi-Fi, это не мешает вашему мониторингу данных.
Подключите ваш телефон к вашей новой сети. Мне часто нужно несколько попыток здесь. Если телефон не хочет подключаться, включите Wi-Fi Mac, затем повторите шаг 2 выше и наберитесь терпения.
Запустите 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.
- В нем есть четкий набор инструкций по настройке как для симуляторов iOS, так и для эмуляторов Android .
- У него простой, интуитивно понятный пользовательский интерфейс, с которым легко работать.
- Установить WireShark
- получить IP-адрес от сетевого монитора xcode
- слушать интерфейс Wi-Fi
- установить фильтр 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
в ваших запросах. Надеюсь, это поможет вам поймать журналы.