我正在使用 *越狱设备,我想编写应用程序以列出开放端口(例如TCP端口)。
我有两个想法:
我应该使用哪个API或shell命令以及如何以编程方式触发它?
答案 0 :(得分:6)
我这样做的方法是让你的应用程序以编程方式调用UNIX lsof
命令。 lsof
列出打开的“文件”,它在BSD系统上包含套接字,其中包括TCP套接字。
过去,Saurik发布了Cydia上可用的lsof
版本。不幸的是,我最近无法上班。您可以自己尝试一下,因为Saurik的软件通常应该值得信赖。您也可以尝试自己编译lsof
源代码,因为它可以在线获取。
然而,我找到了a discussion thread about this here。用户Firewire888能够在iOS上获得lsof
的自制版本。如果您信任他们的工作,那么您可以下载二进制文件file here。根据他们的指示:
- 在mac osx上下载ldid for macosx。 https://networkpx.googlecode.com/files/ldid
- 在mac osx下载scaner's version of lsof in this thread。再次感谢!
- 在mac osx上运行
ldid -S lsof
- scp或其他任何方式在iPhone上获取
醇>lsof
到/usr/sbin/lsof
(必须在/ usr / sbin中,否则错误无法分叉)
因此,您需要伪造lsof
版本的代码,然后在/usr/sbin/lsof
将其安装到您的iPhone上。
然后,您可以使用私有API NSTask
(OS X上的公共)从您的应用程序中运行shell命令,并捕获输出。
例如,使用命令:
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)
您可以选择使用不同的命令行选项,和/或解析输出,以满足您的需求。祝你好运!