Comment obtenir les ports sur lesquels un processus écoute en utilisant python? Le pid du processus est connu.Comment obtenir des ports sur lesquels un processus en écoute?
Répondre
Vous pouvez utiliser netstat -lnp
, la dernière colonne contiendra le nom du processus et du pid. En Python, vous pouvez analyser la sortie de cette commande.
Si vous ne voulez pas analyser la sortie d'un programme comme netstat ou lsof, vous pouvez parcourir le système de fichiers/proc et essayer de trouver la documentation sur les fichiers qu'il contient. /proc/<pid>/net/tcp
pourrait être particulièrement intéressant pour vous. Bien sûr, le format de ces fichiers peut changer entre les versions du noyau, donc la sortie de la commande d'analyse est généralement considérée comme plus fiable.
Il y a deux parties à ma réponse:
1. Obtenir les informations contenues dans la coquille
Pour la première partie, netstat
fonctionnerait, mais je préfère utiliser lsof
, car il peut être utilisé extraire une liste plus informative et concise. Les options exactes à utiliser peut varier en fonction de votre système d'exploitation, les options du noyau et de compilation, mais je crois que vous voulez quelque chose comme ceci:
lsof -a -p23819 -i4
Où 23819
est le PID que vous sélectionnez pour, et i4
désigne tous les sockets IPv4 (mais vous pouvez vouloir i6
pour IPv6, selon le cas). De là, vous pouvez passer par grep pour sélectionner uniquement les sockets d'écoute.
lsof -a -p23819 -i4 | grep LISTEN
(Dans lsof
la version 4,82, vous pouvez en outre utiliser le drapeau -sTCP:LISTEN
au lieu de grep
pour sélectionner les prises d'écoute, bien que cette option ne semble pas être disponible retour dans la version 4,78)
2. appel lsof
de Python
Vous devriez être en mesure d'appeler lsof
et lire la sortie, à partir de Python, en utilisant le module subprocess
, comme ceci:
from subprocess import Popen, PIPE
p1 = Popen(['lsof', '-a', '-p23819', '-i4'], stdout=PIPE)
p2 = Popen(["grep", "LISTEN"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Espérons que cela aide!
Vous pouvez utiliser psutil:
>>> import psutil
>>> p = psutil.Process(2549)
>>> p.name()
'proftpd: (accepting connections)'
>>> p.connections()
[connection(fd=1, family=10, type=1, local_address=('::', 21), remote_address=(), status='LISTEN')]
... Pour filtrer les prises d'écoute:
>>> [x for x in p.get_connections() if x.status == psutil.CONN_LISTEN]
[connection(fd=1, family=10, type=1, local_address=('::', 21), remote_address=(), status='LISTEN')]
>>>
Une chose qui n'a pas été mentionné. La plupart des applications de port dans python prennent un argument de ligne de commande. Vous pouvez analyser/proc/pid/cmdline et analyser le numéro de port. Cela évite l'utilisation de ss ou netstat sur les serveurs avec une tonne de connexions.
- 1. C++ Quel processus écoute sur un certain port dans windows
- 2. Comment installer un ports dépréciés sur FreeBSD
- 3. une requête mise sur écoute
- 4. Écoute des événements du plugin en eclipse
- 5. Comment obtenir des informations en cliquant sur un lien?
- 6. écoute sur socket UDP
- 7. Obtenir des informations sur les processus en cours
- 8. Scripts sur des ports non standards
- 9. port écoute en javascript
- 10. Comment obtenir des données dans un processus Ruby?
- 11. Obtenir des informations sur un objet dans un processus en cours
- 12. Test de charge VS2010 - Restriction des ports
- 13. Déterminer les ports libres
- 14. Comment obtenir la liste des ports qui sont utilisés sur le serveur depuis Delphi
- 15. Déterminez si un serveur écoute sur un port donné
- 16. Écoute des appels sortants/entrants
- 17. comment obtenir la liste des ports qui sont utilisés sur le serveur
- 18. obtenir un progid d'un processus en cours
- 19. Démarrage d'un processus et écoute de l'événement de sortie
- 20. Comment reconnaître l'utilisateur sélectionné lesquels?
- 21. Comment écrire un serveur HTTP python pour écouter sur plusieurs ports?
- 22. Projets/problèmes/défis intéressants sur lesquels travailler?
- 23. Comment créer des ports COM virtuels
- 24. IO Achèvement des ports: comment fonctionne WSARecv()?
- 25. Comment accéder aux ports USB en Java
- 26. Comment puis-je écouter plusieurs ports série asynchrones en C#
- 27. Comment numériser les ports COM en C#?
- 28. Java: Obtenir un processus avec un pid
- 29. Comment fonctionnent les messagers (écoute)?
- 30. Comment obtenir un processus par nom de processus de savoir sur Mac OS?
Merci. psutil est un bon module. Mais le seul problème est que l'utilisation du module nécessite d'être installé en premier. Et l'installation de psutil nécessite les en-têtes gcc et python à installer. Donc, le projet utilisant psutil serait difficile à installer. – mtoloo
psutil a besoin de gcc car il contient du code C qui doit être compilé. Je n'irais pas jusqu'à dire que c'est si difficile à installer, surtout sur Linux. Sur Ubuntu, par exemple, vous avez simplement besoin de "apt-get install python-dev" et "pip install psutil" et vous avez terminé. –