2015-01-12 11 views
1

Привет Я пишу приложение для Mac, которое должно записывать трафик на порт 37265 localhost. При записи трафика порт 37265 используется калабашей для запуска автоматизированного тестирования приложений iPhone в симуляторе iPhone. Тесты Calabash генерируют http-связь на порту 37265, и я хотел бы обработать это сообщение после окончания теста.Захват трафика по TCP-порту программно

Можете ли вы дать мне подсказки о том, как закодировать такой портатор трафика?

Очень важно, что мне необходимо фиксировать коммуникацию программно не Wireshark или другим программным обеспечением!

ответ

1

Если я правильно вас понимаю, вы хотите обработать HTTP-связь при тестировании с помощью calabash.

Вместо кодирования этой функции вы можете использовать сниффер пакетов для этого, например. WireShark.

После завершения тестирования с помощью calabash вы можете остановить захват сети, и вы можете фильтровать на указанном вами порту, например. с DisplayFilters.

+0

Спасибо за идею. Но, как я писал, мне нужно программно обрабатывать коммуникацию. Поэтому мне нужно записать его в моем коде, а не с помощью внешнего приложения, поскольку wirehark is – gbaor

+0

Возможно, вы могли бы попробовать библиотеку под названием [GCDAsyncSocket] (https://github.com/robbiehanson/CocoaAsyncSocket), которая может быть использована для создания обоих TCP/UDP и поставляется с методами делегирования для чтения и записи данных. –

0

Пока что лучшим решением будет вызов tcpdump из моего кода с фильтром на порт 37265 и на TCP-пакеты. Окончательное решение выглядит так:

_dumpTask = [[NSTask alloc] init]; 
[_dumpTask setLaunchPath: @"/usr/sbin/tcpdump"]; 
[_dumpTask setArguments: @[@"-i", @"lo0", @"-s", @"0", @"-B", @"52428", @"-w", @"/Users/user/Desktop/dump.pcap", @"-v", @"port", @"37265", @"and", @"tcp"]]; 

NSPipe *pipe; 
pipe = [NSPipe pipe]; 
[_dumpTask setStandardOutput: pipe]; 

NSFileHandle *file; 
file = [pipe fileHandleForReading]; 

[_dumpTask launch]; 

NSData *data; 
data = [file readDataToEndOfFile]; 
NSString *response = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
NSLog(@"%@", response); 
+0

Нет "sudo" не требуется! – gbaor

Смежные вопросы