gpt4 book ai didi

ios - 如何列出 iOS 中的开放端口?

转载 作者:可可西里 更新时间:2023-11-01 02:44:40 28 4
gpt4 key购买 nike

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

我有两个想法:

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

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

最佳答案

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

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

但是,我找到了 a discussion thread about this here 。用户 Firewire888 能够获得在 iOS 上运行的 lsof 的自制版本。如果您信任他们的工作,那么您可以下载二进制文件 file here 。按照他们的指示:

  1. On mac osx download ldid for macosx. https://networkpx.googlecode.com/files/ldid
  2. On mac osx download scaner's version of lsof in this thread. Thanks again!
  3. On mac osx run ldid -S lsof
  4. scp or whatever means get lsof to /usr/sbin/lsof on iPhone ( has to be in /usr/sbin otherwise get error can't fork )

因此,您需要伪造那个版本的 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 header ,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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com