Как получить список портов открытия tcp / udp на iphone по target-c? - PullRequest
4 голосов
/ 18 ноября 2011

Привет, я хочу получить список всех открытых портов TCP / UDP на iphone по target-c? как netstat в Linux, вы знаете, как этого добиться, или там любой API может это сделать? Спасибо.

Ответы [ 2 ]

5 голосов
/ 18 ноября 2011

Вы не можете запустить 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), поэтому вы можете использовать их.

4 голосов
/ 21 ноября 2013

Чтобы получить данные, читаемые ответом робота Майоффа, читабельными, вам просто нужно взглянуть на код inet.c . В нем есть все, что вам нужно для анализа данных.

Взгляните на мой другой ответ на вопрос Хисенберга: Мониторинг сетевой активности на iPhone

В моем коде вы можете видеть, в какой части кода данные читаются, то есть когда я добавляю значения в словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...