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

时间:2013-05-09 20:39:53

标签: ios sockets iphone-privateapi

我有以下情况:

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

在我的应用中,我想确保与正确的应用进行对话。

我知道如何通过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本身。我关心的是弄清楚套接字另一端的应用是什么。

1 个答案:

答案 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。