2013-05-09 131 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

相關問題