gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:59:40 25 4
gpt4 key购买 nike

您好,我想通过 objective-c 获取 iphone 上的所有 tcp/udp 打开端口状态列表?像 Linux 上的 netstat,你知道如何实现它或有任何 API 能做到这一点吗?谢谢。

最佳答案

你不能运行 netstat在 iPhone 上(除非你越狱),但你可以做什么 netstat做。看看函数protoprthe netstat source code .我确认你可以调用 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 使用的数据结构在 <netinet/in_pcb.h> 中声明, <netinet/tcp_var.h> ,以及 /usr/include/netinet 中的其他头文件.这些头文件包含在 iOS SDK 中(至少从 iOS 7.0 开始),因此您可以使用它们。

关于iphone - 如何通过 objective-c 在 iphone 上获取 tcp/udp 开放端口列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com