有没有办法找到套接字对等进程的pid?

我有以下情况:

  • iOS上的两个应用程序(我的和第三方)需要通过TCP / IP进行通信
  • 我可以更改我的应用程序的代码,但不能更改第三方应用程序
  • 协议无法更改(因为我无法更改第三方应用程序)。

在我的应用程序中,我想确保我与正确的应用程序通信。

我知道如何通过geetpeername获得对等端口

我正在寻找的是一种方法来找出使用此端口的进程的pid。

我发现了类似的问题: 如何确定同一iOS设备上对等TCP连接的PID? 但是,在他的情况下,两个端口都在同一个应用程序中。

免责声明:我对私有API很好。 它不会被发送到AppStore。 但是,我正在为非越狱手机寻找解决方案。

更新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开源版本可以在这里找到 。 因此,您可以尝试从main.c开始,并使用这些命令行参数,浏览代码,直到找到所使用的系统调用。

在具有用户移动权限的进程中运行时,所需的调用当然可能无效 。 但是,也许不是吗? 如果在lsof源本身内部进行了安全检查,那么如果您自己复制并粘贴源代码,则可以删除它。

无论如何,如果没有人提供另一个答案,它可能值得一试。

注意: lsof适用于越狱手机,我只是尝试运行Cydia提供的当前版本。 在5.1.1或6.1.2中,它们对我不起作用。 不知道为什么。 我假设如果他们在存储库中,在某些时候,有人能够将lsof移植到iOS。