以编程方式捕获TCP端口上的流量

时间:2015-01-12 15:09:41

标签: objective-c macos tcp localhost

您好我正在编写一个应用程序,应该记录localhost端口37265上的流量。 在记录流量时,calabash使用端口37265在iPhone模拟器中运行iPhone应用程序的自动测试。 Calabash测试在端口37265上生成http通信,我想在测试完成后处理该通信。

你能给我提示如何编写这样的端口流量记录器吗?

我需要以编程方式捕获通信,而不是Wireshark或其他软件!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望在使用calabash进行测试时处理HTTP通信。

您可以使用数据包嗅探器代替对此功能进行编码,例如: WireShark

使用calabash完成测试后,您可以停止网络捕获,并且可以在指定的端口上进行过滤,例如:与DisplayFilters

答案 1 :(得分:0)

到目前为止,看起来最好的解决方案是使用端口37265上的过滤器和TCP数据包从我的代码调用tcpdump。 最终解决方案如下所示:

_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);