【发布时间】: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 开放端口列表作为输出?
谢谢。
【问题讨论】: