【问题标题】:Capturing traffic on TCP port programmatically以编程方式捕获 TCP 端口上的流量
【发布时间】:2015-01-12 15:09:41
【问题描述】:

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

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

我需要以编程方式而不是通过 Wireshark 或其他软件来捕获通信,这一点非常重要!

【问题讨论】:

    标签: objective-c macos tcp localhost


    【解决方案1】:

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

    您可以为此使用数据包嗅探器,而不是对此功能进行编码,例如WireShark.

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

    【讨论】:

    • 感谢您的想法。但正如我所写,我需要以编程方式处理通信。所以我需要将它记录在我的代码中,而不是像wireshark那样通过外部应用程序记录
    • 也许你可以试试名为GCDAsyncSocket 的库,它可用于创建 TCP/UDP 套接字,并带有用于读取和写入数据的委托方法。
    【解决方案2】:

    到目前为止,看起来最好的解决方案是从我的代码中调用 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);
    

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 2016-12-05
      • 2017-03-10
      • 2018-02-14
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2012-03-11
      • 2011-05-17
      相关资源
      最近更新 更多