Is there a way to find pid of a process of socket peer?

◇◆丶佛笑我妖孽 提交于 2019-12-10 21:35:16

问题


I have the following case:

  • Two applications (mine and 3rd party) on iOS need to communicate over TCP/IP
  • I can change the code of my app, but not the 3rd party app
  • The protocol can't be changed (because I can't change the 3rd party app).

In my app, I want to make sure that I talk to the correct app.

I know how I can get peer port with geetpeername

What I am looking for is a way to figure out the pid of the process which uses this port.

I found similar question: How do you determine the PID of a peer TCP connection on the same iOS device? However, in his case, both ports are in the same app.

Disclaimer: I am fine with private API. It won't be sent to AppStore. However, I am looking for a solution for non a jailbroken phone.

Update 1

I said that I need PID, because there are known ways of getting association between PID and application bundle id (using sysctl).

Generally speaking, I don't care about PID per se. My concern is figure out what is the application on other side of the socket.


回答1:


I don't have a solution for this, but if I was going to try to do it, I would proceed in the following way:

On a UNIX system, you can use the lsof command to determine which processes have which files open. This includes sockets, and lsof allows you to determine the pid of a process using a given port. For example, use

lsof -n -P -i :443

if you're trying to determine which process is using port 443 (HTTPS), which might yield (on 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)

The open source version of lsof for Darwin, I believe, can be found here. So you might try starting with main.c, and using those command line arguments, navigate through the code until you find the system calls that are used.

It's certainly possible that the calls needed will not work when run in a process with user mobile privileges. But, maybe not? If there's a security check inside the lsof source itself, then you can certainly remove that, if you copy and paste the source yourself.

Anyway, it might be worth a try, if no one offers another answer.

Note: lsof is available for jailbroken phones, and I just tried running the current versions available from Cydia. They did not work for me, on 5.1.1 or 6.1.2. Not sure why. I assume that if they were on the repository, though, at some point, someone was able to port lsof to iOS.



来源:https://stackoverflow.com/questions/16470715/is-there-a-way-to-find-pid-of-a-process-of-socket-peer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!