Swizzling низкоуровневые методы TCP в IOS

Я пытаюсь найти способ получить информацию обо всем TCP-трафике в моем приложении IOS и из него. Приложение очень простое и состоит из одного объекта UIWebView.

Я пытался использовать swizzling для NSURLRequest, но мне не повезло с этим - моя версия requestWithURL: вызывается, когда я вызываю ее NSURLRequest вручную, но, похоже, она никогда не вызывается при переходе на страницу в UIWebView, поэтому Я предполагаю, что под одеялом используется другой объект.

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

Есть ли способы подключиться к функциям C в IOS или любым другим API, которые я могу попробовать использовать для доступа к трафику TCP (или даже HTTP)?

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

Спасибо!


person Locksleyu    schedule 09.12.2011    source источник
comment
Я не уверен, но вы могли бы зарегистрировать обработчик протокола для протокола http:, который будет вызываться при каждом HTTP-запросе. Я сделал что-то подобное на Java несколько лет назад и читал об этой технике в ObjC, но никогда не пробовал ее. YMMV.   -  person Cliff    schedule 10.12.2011
comment
Спасибо за предложение. Я изучил это, и кажется, что вы не можете переопределить существующие протоколы, такие как HTTP, но если кто-то знает другие способы, сообщите мне (:   -  person Locksleyu    schedule 10.12.2011


Ответы (1)


Просто настройте внешний прокси-сервер, например Fiddler или Charles, для мониторинга http-трафика. Или посложнее, Wireshark для любого tcp трафика. Это будет намного проще, чем то, что вы пытаетесь сделать, и более мощно.

person TomSwift    schedule 09.12.2011
comment
iPhone -> Компьютер-вещание-wifi -> Интернет. - person JoePasq; 10.12.2011
comment
Спасибо за идею. Это долгая история, но внешнее решение, к сожалению, не подойдет для того, что мне нужно. Любые другие идеи? - person Locksleyu; 10.12.2011
comment
если вы не отлаживаете что-то, что уже развернуто, я не вижу причин, по которым прокси не соответствовал бы всем требованиям. - person TomSwift; 10.12.2011
comment
Да, мне приходится иметь дело со сложной настройкой сети, когда я не могу добавить какие-либо дополнительные внешние устройства, поэтому мне нужен способ сделать это на стороне клиента. - person Locksleyu; 11.12.2011
comment
@vame - в большинстве случаев вы можете использовать Fiddler или Charles и настроить атаку «человек посередине» для расшифровки трафика. Оба этих приложения упрощают это. - person TomSwift; 08.04.2014
comment
@TomSwift, вы правы, это можно сделать, но это не тривиально: stackoverflow.com/a/14907718/700816 - person Vame; 08.04.2014