0

我正在尝试使用 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 开放端口列表作为输出?

谢谢。

4

1 回答 1

2

从 BSD 源代码复制netstat 代码。

参见 main.c 中的 printproto() 函数

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

谢谢。

于 2013-01-10T07:01:00.483 回答