我有以下情况:
在我的应用中,我想确保与正确的应用进行对话。
我知道如何通过geetpeername
获得对等端口我正在寻找的方法是找出使用此端口的进程的pid。
我发现了类似的问题:How do you determine the PID of a peer TCP connection on the same iOS device? 但是,在他的情况下,两个端口都在同一个应用程序中。
免责声明:我对私有API很好。它不会被发送到AppStore。但是,我正在为非越狱手机寻找解决方案。
更新1
我说我需要PID,因为有一些已知的方法可以获得PID和应用程序包id之间的关联(使用sysctl)。
一般来说,我不关心PID本身。我关心的是弄清楚套接字另一端的应用是什么。
答案 0 :(得分:2)
我没有这方面的解决方案,但如果我打算尝试这样做,我会按以下方式进行:
在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
开源版本can be found here。因此,您可以尝试从main.c开始,并使用这些命令行参数,浏览代码,直到找到所使用的系统调用。
the calls needed will not work when run in a process with user mobile privileges当然可能。但是,也许不是吗?如果在lsof
源本身内部进行了安全检查,那么如果您自己复制并粘贴源代码,则可以删除它。
无论如何,如果没有人提供另一个答案,可能值得一试。
注意: lsof
可用于越狱手机,我只是尝试运行Cydia提供的当前版本。在5.1.1或6.1.2中,它们对我不起作用。不知道为什么。我假设,如果他们在存储库中,但在某些时候,某人能够将lsof
移植到iOS。