当前位置:  开发笔记 > 运维 > 正文

如何通过objective-c获取iphone上的tcp/udp开放端口列表?

如何解决《如何通过objective-c获取iphone上的tcp/udp开放端口列表?》经验,为你挑选了1个好方法。

嗨我想通过objective-c获取iphone上的所有tcp/udp开放端口状态列表?像Linux上的netstat,你知道如何实现它,或者有任何API可以做到这一点?谢谢.



1> rob mayoff..:

你无法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.另外,你不能只是把内容bufNSString,好像它是一个C字符串.不是.这是您必须解释的二进制数据,就像netstat它一样.

大概你想要解释数据.您需要阅读我在上面链接protoprnetstat源代码中的函数.使用的数据结构protopr,以及其他头文件中声明/usr/include/netinet.这些头文件包含在iOS SDK中(至少从iOS 7.0开始),因此您可以使用它们.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有