Comment obtenir les ports d'un processus en écoute sur?
Comment puis-je obtenir les ports qu'un processus est à l'écoute sur l'utilisation de python? Le pid du processus est connu.
Vous devez vous connecter pour publier un commentaire.
Comment puis-je obtenir les ports qu'un processus est à l'écoute sur l'utilisation de python? Le pid du processus est connu.
Vous devez vous connecter pour publier un commentaire.
Il y a deux parties à ma réponse:
1. Pour obtenir de l'information dans le shell
Pour la première partie,
netstat
pourrait fonctionner, mais je préfère utiliserlsof
, puisqu'il peut être utilisé pour extraire une plus informatif et concis liste. L'exact options à utiliser peut varier en fonction de votre système d'exploitation, le noyau et les options de compilation, mais je crois que vous voulez quelque chose comme ceci:Où
23819
est le PID de la sélection, eti4
désigne l'ensemble des sockets IPv4 (bien que vous pourriezi6
pour IPv6, selon le cas peut être). À partir de là, vous pouvez pipe à travers grep pour sélectionner uniquement les sockets d'écoute.(En
lsof
version 4.82, vous pouvez en outre utiliser le-sTCP:LISTEN
drapeau au lieu degrep
pour sélectionner les sockets d'écoute, mais cette option ne semble pas être disponible dans la version 4.78)2. L'appel de
lsof
de PythonVous devriez être en mesure d'appeler
lsof
et de lire la sortie, de Python, de l'aide de l'subprocess
module, comme suit:Espérons que cette aide!
Vous pouvez utiliser psutil:
...Pour filtrer les sockets en écoute:
Si vous ne souhaitez pas analyser les données en sortie d'un programme comme netstat ou lsof, vous pouvez ramper à travers le système de fichiers /proc et essayer de trouver de la documentation sur les fichiers à l'intérieur.
/proc/<pid>/net/tcp
peut être particulièrement intéressant pour vous. Bien sûr, le format de ces fichiers peut changer entre le noyau de communiqués, de sorte que l'analyse de la sortie de commande est généralement considéré comme plus fiable.Vous pouvez utiliser
netstat -lnp
, la dernière colonne contient le pid et le nom du processus. En Python, vous pouvez analyser la sortie de cette commande.Une chose qui n'était pas mentionné. La plupart des applications de port en python prendre un argument de ligne de commande. Vous pouvez analyser /proc/pid/cmdline et analyser le numéro de port. Cela évite les grands généraux de l'utilisation de la ss ou de la commande netstat sur des serveurs avec une tonne de connexions.