Y a-t-il un moyen de find le pid d'un process de pair de socket?

J'ai le cas suivant:

  • Deux applications (mine et tierce partie) sur iOS ont besoin de communiquer via TCP / IP
  • Je peux changer le code de mon application, mais pas l'application tierce
  • Le protocole ne peut pas être modifié (parce que je ne peux pas changer l'application tierce).

Dans mon application, je veux m'assurer que je parle à l'application correcte.

Je sais comment je peux get le port de pair avec geetpeername

Ce que je cherche est un moyen de comprendre le pid du process qui utilise ce port.

J'ai trouvé une question similaire: Comment déterminez-vous le PID d'une connection TCP homologue sur le même appareil iOS? Cependant, dans son cas, les deux ports sont dans la même application.

Disclaimer: Je vais bien avec l'API privée. Il ne sera pas envoyé à l'AppStore. Cependant, je suis à la search d'une solution pour un téléphone non jailbreaké.

Mise à jour 1

J'ai dit que j'avais besoin de PID, car il existe des moyens connus d'get une association entre PID et ID d'set d'application (en utilisant sysctl).

De manière générale, je ne me soucie pas du PID en soi. Ma préoccupation est de comprendre quelle est l'application de l'autre côté de la socket.

Je n'ai pas de solution pour cela, mais si j'essayais de le faire, je procéderais de la manière suivante:

Sur un système UNIX, vous pouvez utiliser la command lsof pour déterminer quels process ont quels files ouverts. Ceci inclut les sockets, et lsof vous permet de déterminer le pid d'un process en utilisant un port donné. Par exemple, utiliser

 lsof -n -P -i :443 

si vous essayez de déterminer quel process utilise le port 443 (HTTPS), ce qui pourrait donner (sous 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) 

La version open source de lsof pour Darwin, je crois, peut être trouvée ici . Vous pouvez donc essayer de démarrer avec main.c et, en utilisant ces arguments de command line, naviguer dans le code jusqu'à ce que vous trouviez les appels système qui sont utilisés.

Il est certainement possible que les appels nécessaires ne fonctionnent pas lorsqu'ils sont exécutés dans un process avec des privilèges d'user mobile . Mais, peut-être pas? S'il y a une vérification de security à l'intérieur de la source lsof elle-même, alors vous pouvez certainement supprimer cela, si vous copyz et collez la source vous-même.

Quoi qu'il en soit, cela pourrait valoir la peine d'essayer, si personne ne propose une autre réponse.

Note: lsof est disponible pour les téléphones jailbreakés, et j'ai juste essayé d'exécuter les versions actuelles de Cydia. Ils n'ont pas fonctionné pour moi, sur 5.1.1 ou 6.1.2. Pas certain de pourquoi. Je suppose que si elles étaient sur le référentiel, à un moment donné, quelqu'un était capable de porter lsof sur iOS.