我有以下案例:
- iOS 上的两个应用程序(我的和第三方)需要通过 TCP/IP 进行通信
- 我可以更改我的应用程序的代码,但不能更改第 3 方应用程序的代码
- 协议无法更改(因为我无法更改第 3 方应用程序)。
在我的应用程序中,我想确保与正确的应用程序对话。
我知道如何获得对等端口geetpeername http://www.beej.us/guide/bgnet/output/html/multipage/getpeernameman.html
我正在寻找一种方法来找出使用该端口的进程的 pid。
我发现类似的问题:如何确定同一 iOS 设备上对等 TCP 连接的 PID? https://stackoverflow.com/questions/8248028/how-do-you-determine-the-pid-of-a-peer-tcp-connection-on-the-same-ios-device#comment23631276_8248028然而,在他的例子中,两个端口都在同一个应用程序中。
免责声明:我对私有 API 很满意。它不会发送到 AppStore。但是,我正在寻找非越狱手机的解决方案。
Update 1
我说我需要 PID,因为有已知的方法可以获取 PID 和应用程序包 id 之间的关联(使用 sysctl)。
一般来说,我并不关心PID本身。我关心的是弄清楚套接字另一端的应用程序是什么。
我没有解决方案,但如果我要尝试这样做,我会按以下方式进行:
在 UNIX 系统上,您可以使用lsof
命令来确定哪些进程打开了哪些文件。这包括套接字和lsof
允许您确定使用给定端口的进程的 pid。例如,使用
lsof -n -P -i :443
如果您尝试确定哪个进程正在使用端口 443 (HTTPS),这可能会产生(在 OS X 上):
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox 81615 myname 112u IPv4 0xffffff8017379a40 0t0 TCP 192.168.2.7:52521->74.125.28.103:443 (CLOSE_WAIT)
开源版本lsof
对于达尔文来说,我相信,可以在这里找到 http://www.opensource.apple.com/source/lsof/lsof-49/lsof/。因此,您可以尝试从 main.c 开始,并使用这些命令行参数,浏览代码,直到找到所使用的系统调用。
这当然有可能当在具有用户移动权限的进程中运行时,所需的调用将不起作用 http://www.noah.org/wiki/Port_to_PID。但是,也许不是?如果里面有安全检查lsof
源本身,那么如果您自己复制并粘贴源,您当然可以删除它。
无论如何,如果没有人提供其他答案,那么可能值得一试。
Note: lsof
适用于越狱手机,我刚刚尝试运行 Cydia 提供的当前版本。它们在 5.1.1 或 6.1.2 上对我不起作用。不知道为什么。我假设,如果它们在存储库中,那么在某些时候,有人能够移植lsof
to iOS.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)