我正在使用 *越狱的设备,并且我想编写应用程序来列出打开的端口(例如TCP端口)。

我有两个想法:

  • 使用一些本机API获取打开的端口列表
  • 执行shell命令以获取已打开端口的列表,并解析此shell命令的结果。

  • 我应该使用哪个API或Shell命令,以及如何以编程方式触发它?

    最佳答案

    我这样做的方法是让您的应用以编程方式调用UNIX lsof命令。 lsof列出打开的“文件”,该文件在BSD系统上包括套接字,其中包括TCP套接字。

    过去,Saurik发布了Cydia上可用的lsof版本。不幸的是,我最近无法使它正常工作。您可以自己尝试一下,因为Saurik的软件通常应该是值得信赖的。您也可以尝试自己编译lsof源代码,因为它可以在线获得。

    但是,我发现a discussion thread about this here。用户Firewire888能够在iOS上使用lsof的自制版本。如果您信任他们的工作,则可以下载二进制文件file here。按照他们的指示:


  • 在Mac OS X上,请下载Mac OS X的ldid。 https://networkpx.googlecode.com/files/ldid
  • 在Mac OS X上下载scaner's version of lsof in this thread。再次感谢!
  • 在Mac OS X上运行ldid -S lsof
  • scp或以其他方式在iPhone上将lsof转换为/usr/sbin/lsof(必须在/ usr / sbin中,否则会出错,无法派生)


  • 因此,您需要对那个版本的lsof进行伪代码签名,然后将其安装在iPhone上的/usr/sbin/lsof上。

    然后,您可以使用 private API NSTask(在OS X上为public)从应用程序内部运行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)
    

    您可以选择使用不同的命令行选项和/或解析输出,以满足您的需求。祝好运!

    关于ios - 如何列出iOS中的开放端口?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18737305/

    10-09 02:16