2013-05-09 134 views
3

我有以下情况:在iOS上有没有办法找到socket对等进程的pid?

  • 两个应用程序(我和第三方)需要在沟通TCP/IP
  • 我可以改变我的应用程序的代码,而不是第三方应用程序
  • 协议无法更改(因为我无法更改第三方应用程序)。

在我的应用程序中,我想确保我与正确的应用程序交谈。

我知道我能得到同行端口geetpeername

我所寻找的是要弄清楚它使用此端口的进程的PID方式。

我发现了类似的问题:How do you determine the PID of a peer TCP connection on the same iOS device? 但是,在他的情况下,两个端口都在同一个应用程序。

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

更新1

我说,我需要的PID,因为那里是已知的(通过sysctl)得到PID和应用程序包ID之间的关联方式。

一般来说,我并不在乎PID本身。我关心的是弄清楚套接字另一端的应用是什么。

+1

这似乎不太可能。 PID如何提供帮助?也许如果你提供更多的细节,我们可以提出替代解决方案。如果其他服务没有真正回答已知响应的连接,它似乎会有某种类型的指纹。 – 2013-05-09 20:44:51

+0

@MarcusAdams我猜如果你能匹配进程名称和pid,我不确定你可以在iOS下做什么,由于沙盒,pid只会有所帮助。但是,我同意,这非常哈克。 – trojanfoe 2013-05-09 20:48:36

+0

@MarcusAdams:我写了一个更新。 – 2013-05-09 20:49:17

回答

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上不适合我。不知道为什么。我假设,如果他们在存储库中,但是某个时候,有人能够将iOS端口lsof移植到iOS上。

+0

非常感谢。我发现了类似的信息(我需要lsof或netstat)。然而,它需要“sudo”在OS X上运行属性的问题(所以我认为它不适用于iOS)。但是,我同意,我需要尝试一下 – 2013-05-10 14:55:19

+0

是的,就像我说的,我不确定**安全检查是在哪里,如果它在'lsof'代码中,那么你可以自己删除它。如果某些系统调用'lsof'使用需要root权限,那么你可能会失败。然而,我在桌面上运行的一个快速测试表明,运行'lsof'作为'mobile'可能会限制你找出哪些进程(由**运行)正在监听给定的端口。试图检测另一个第三方应用程序,那么它也应该由'mobile'运行。所以,它可能适用于您的目的? – Nate 2013-05-11 22:40:46

相关问题