Вы не можете запустить 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);
}
Вывод на iPad 2 под управлением iOS 5.0:
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), поэтому вы можете использовать их.