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 オープン ポート リストを取得する方法を知っている人はいますか?
ありがとう。