嗨我想通过objective-c获取iphone上的所有tcp/udp开放端口状态列表?像Linux上的netstat,你知道如何实现它,或者有任何API可以做到这一点?谢谢.
你无法netstat
在iPhone上运行(除非你越狱),但你可以做到这netstat
一点.看看函数protopr
中的netstat
源代码.我核实,可以调用sysctlbyname
与"net.inet.tcp.pcblist"
作为名称并取回一串数据.我没有尝试像netstat
这样解释数据.
测试用例:
size_t len = 0; if (sysctlbyname("net.inet.tcp.pcblist", 0, &len, 0, 0) < 0) { perror("sysctlbyname"); } else { char *buf = malloc(len); sysctlbyname("net.inet.tcp.pcblist", buf, &len, 0, 0); NSData *data = [NSData dataWithBytesNoCopy:buf length:len]; NSLog(@"data = %@", data); }
在运行iOS 5.0的iPad 2上输出:
2011-11-17 19:59:34.712 keyboardtest[29423:707] data = <18000000 2c000000 9e2a0900 00000000 c60e5d00 00000000 0c020000 00000000 00000000 00000000 00000000 d4d3d4d2 00000000 00000000 ...
还有更多我被截断了.
确保您初始化len
为0.另外,你不能只是把内容buf
在NSString
,好像它是一个C字符串.不是.这是您必须解释的二进制数据,就像netstat
它一样.
大概你想要解释数据.您需要阅读我在上面链接protopr
的netstat
源代码中的函数.使用的数据结构protopr
在
和
,以及其他头文件中声明/usr/include/netinet
.这些头文件包含在iOS SDK中(至少从iOS 7.0开始),因此您可以使用它们.