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 に答える