【问题标题】:How do I read buffer data retrieved from sysctlbyname() in iPhone?如何读取从 iPhone 中的 sysctlbyname() 检索的缓冲区数据?
【发布时间】:2012-12-20 23:07:17
【问题描述】:

我正在尝试使用 sysctlbyname() 获取 iPhone 中的 TCP 开放端口列表。

 sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp,
     size_t newlen);

.

 #include <sys/sysctl.h>

 size_t len = 0;
 if (sysctlbyname("net.inet.tcp.pcblist", 0, &len, 0, 0) < 0) {
      perror("sysctlbyname");
 } else {
      char *buf = malloc(len);
      //printf("%d",sizeof(buf));
      sysctlbyname("net.inet.tcp.pcblist", buf, &len, 0, 0);
      NSData *data = [NSData dataWithBytesNoCopy:buf length:len];
      NSLog(@"data = %@", data);

      //printf("%d",sizeof(buf));
      //printf("%s",buf);
 }

信息被复制到oldp指定的缓冲区中。

输出::

data = <18000000 34000000 d8160000 00000000 7d760000 00000000 0c020000 00000000 00000000 00000000 00000000 0050c598 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 c2160000 00000000 40008000 00000000 01400000

这里的缓冲区充满了数据。但我无法以可读格式打印数据。将此数据转换为 NSString 无济于事,因为内部缓冲区有自己的结构。

有谁知道如何从这些数据中获取 TCP 开放端口列表作为输出?

谢谢。

【问题讨论】:

    标签: iphone ios sysctl


    【解决方案1】:

    从 BSD 源复制 netstat code

    查看 main.c 中的 printproto() 函数

    这将探索与此缓冲区相关的所有内容以及如何获取 TCP 端口列表。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多