2013-09-11 5 views
1

Я использую устройство * jailbroken, и я хочу, чтобы написал приложение, чтобы перечислить открытые порты (например, порты TCP).Как перечислить открытые порты в iOS?

У меня есть две идеи:

  • использовать некоторые родной API, чтобы получить список открытых портов
  • выполнить команду оболочки, чтобы получить список открытых портов и проанализировать результат этой команды оболочки.

Какую команду API или оболочки следует использовать и как ее можно запускать программным путем?

+0

Я бы порекомендовал перефразировать ваш вопрос. Я прочитал его в первый раз и сделал предположение, что вы просто хотите получить список открытых портов в оболочке (что подразумевает, что это не вопрос разработки программного обеспечения). И только во втором чтении я заметил часть «сделать заявку». И похоже, что по крайней мере 4 человека сделали то же самое. –

+0

@frankish: Я проголосовал за повторное открытие и поддержку. Я считаю ваш вопрос законным и интересным. –

+0

@Nate: Черт .. Мне нужно больше читать комментарии. Я думал, что франкиш написал комментарий (а не вы). Я добавил еще немного подробностей к его вопросу. –

ответ

5

Способ, которым я хотел бы сделать это, - это приложить ваше приложение к команде UNIX lsof программно. lsof перечисляет открытые «файлы», которые в системе BSD содержат сокеты, которые включают в себя сокеты TCP.

Раньше было, что Саурик опубликовал версию lsof, которая была доступна на Cydia. К сожалению, я не смог заставить это работать недавно. Вы можете попробовать это самостоятельно, поскольку программное обеспечение от Saurik должно быть, как правило, заслуживающим доверия. Вы также можете попробовать составить исходный код lsof самостоятельно, так как он доступен онлайн.

Однако, я нашел a discussion thread about this here. Пользователь Firewire888 смог получить домашнюю версию lsof, работающую на iOS. Если вы доверяете своей работе, вы можете загрузить двоичный файл file here. За их инструкции:

  1. На Mac OSX скачать ldid для MacOSX. https://networkpx.googlecode.com/files/ldid
  2. О mac osx загрузить scaner's version of lsof in this thread. Еще раз спасибо!
  3. На Mac OSX перспективе ldid -S lsof
  4. УПП или любыми средствами получить lsof к /usr/sbin/lsof на iPhone (должен находиться в/USR/SBIN в противном случае получить ошибка не может раскошелиться)

Итак, вам нужно подделать код, который имеет версию lsof, а затем установить его на свой iPhone по адресу /usr/sbin/lsof.

Затем вы можете использовать частный API NSTask (общедоступный на OS X) для запуска команды оболочки из своего приложения и захвата вывода.

Например, с помощью команды:

lsof -i4tcp 

будут перечислены все порты IPv4 TCP.

В коде Objective-C, вы могли бы сделать это:

#include "NSTask.h" 

- (void) listTcpPorts { 
    NSTask *task = [[NSTask alloc] init]; 
    [task setLaunchPath: @"/usr/sbin/lsof"]; 
    [task setArguments: [[NSArray alloc] initWithObjects: @"-i4tcp", nil]]; 

    NSPipe *pipe= [NSPipe pipe]; 
    [task setStandardOutput: pipe]; 

    NSFileHandle *file = [pipe fileHandleForReading]; 

    [task launch]; 

    NSData *data = [file readDataToEndOfFile]; 

    NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
    NSLog(@"tcp ports: \n %@", output); 
} 

Это требует загрузки NSTask заголовок, which you can find here.

, который дал мне стандартный вывод:

Sep 11 18:53:47 iPhone5 HelloJB[34535] <Warning>: tcp ports: 
    COMMAND  PID USER FD TYPE  DEVICE SIZE/OFF NODE NAME 
    apsd  143 mobile 9u IPv4 0x12345678  0t0 TCP 10.244.7.127:51216->17.172.238.202:5223 (ESTABLISHED) 
    apsd  143 mobile 10u IPv4 0x12345678  0t0 TCP 10.244.7.127:51215->17.149.37.18:5223 (ESTABLISHED) 
    apsd  143 mobile 12u IPv4 0x12345678  0t0 TCP 10.244.7.127:51215->17.149.37.18:5223 (ESTABLISHED) 
    apsd  143 mobile 14u IPv4 0x12345678  0t0 TCP 10.244.7.127:51216->17.172.238.202:5223 (ESTABLISHED) 
    dataacces 166 mobile 25u IPv4 0x12345678  0t0 TCP 10.244.7.127:51276->pc-in-f193.1e100.net:https (ESTABLISHED) 
    dataacces 166 mobile 27u IPv4 0x12345678  0t0 TCP 10.244.7.127:51276->pc-in-f193.1e100.net:https (ESTABLISHED) 
    afcd  26764 mobile 9u IPv4 0x12345678  0t0 TCP localhost:51284->localhost:51285 (ESTABLISHED) 
    MobileSaf 33165 mobile 11u IPv4 0x12345678  0t0 TCP 192.168.4.119:51349->stackoverflow.com:http (ESTABLISHED) 
    MobileSaf 33165 mobile 12u IPv4 0x12345678  0t0 TCP 192.168.4.119:51349->stackoverflow.com:http (ESTABLISHED) 
    Weather 33191 mobile 5u IPv4 0x12345678  0t0 TCP 192.168.4.119:50181->yts2.yql.vip.gq1.yahoo.com:http (LAST_ACK) 
    Weather 33191 mobile 7u IPv4 0x12345678  0t0 TCP 192.168.4.119:50182->yts2.yql.vip.gq1.yahoo.com:http (LAST_ACK) 
    Weather 33191 mobile 8u IPv4 0x12345678  0t0 TCP 192.168.4.119:50181->yts2.yql.vip.gq1.yahoo.com:http (LAST_ACK) 
    Weather 33191 mobile 10u IPv4 0x12345678  0t0 TCP 192.168.4.119:50182->yts2.yql.vip.gq1.yahoo.com:http (LAST_ACK) 
    notificat 33929 mobile 4u IPv4 0x12345678  0t0 TCP localhost:51295->localhost:51296 (ESTABLISHED) 
    notificat 33929 mobile 5u IPv4 0x12345678  0t0 TCP localhost:51301->localhost:51302 (ESTABLISHED) 
    notificat 33929 mobile 6u IPv4 0x12345678  0t0 TCP localhost:51318->localhost:51319 (ESTABLISHED) 
    notificat 33929 mobile 7u IPv4 0x12345678  0t0 TCP localhost:51330->localhost:51331 (ESTABLISHED) 
    syslog_re 34468 mobile 3u IPv4 0x12345678  0t0 TCP localhost:51321->localhost:51322 (ESTABLISHED) 

Вы можете использовать различные параметры командной строки, и/или разобрать вывод, в соответствии с вашими потребностями. Удачи!

+0

Спасибо за этот отличный ответ Нейт. Считаете ли вы, что может быть альтернатива lsof, когда пользователям не обязательно загружать и устанавливать другой двоичный файл? – frankish

+0

@frankish, Кто ваши пользователи? Вы выпускаете это через Cydia? – Nate

+0

Да, либо через Cydia, либо любой другой общедоступный метод. Кстати, я узнал, что могу использовать sysctlbyname («net.inet.tcp.pcblist» ...), однако я не смог добиться внедрения правильных библиотек. (Я также не уверен, что я нахожусь на правильном пути ...) – frankish

Смежные вопросы