Comment connaître le nom du process qui ouvre un port tcp?

J'ai deux servers Linux. Disons qu'ils sont C et S
C est client de S

Sur ma machine S , je tape.

$ netstat -an | grep ESTABLISHED
tcp 0 0 192.168.1.220:3306 C: 57010 ÉTABLI

Alors je peux savoir que C se connecte maintenant.
Dans la machine C , j'aimerais aussi connaître le nom du process qui ouvre le port 57010 et connecte le server S Comment puis je faire ça? Bien sûr, j'ai la permission root de C

Un moyen est de dire lsof -i:57010 -sTCP:ESTABLISHED . Cela parcourt la table des descripteurs de files ouverts du kernel à la search de process avec une connection TCP établie à l'aide de ce port. (Les sockets réseau sont des handles de files sur les systèmes de type * ix.) Vous utiliserez -sTCP:LISTEN côté server pour ne filterr que le socket d'écoute.

En raison de la façon dont lsof fonctionne, il ne peut voir que les process que votre user possède, sauf si vous l'exécutez en tant que root. C'est également assez inefficace, car un système * ix typique a beaucoup de descripteurs de files ouverts à un moment donné. La méthode netstat donnée dans une autre réponse est plus rapide et a généralement des exigences d'access plus faibles.

lsof méthode lsof présente un grand avantage: tous les systèmes d'exploitation de type ix n'ont pas d'indicateur netstat pour inclure le nom du process dans la sortie, alors que lsof a été porté sur tous les systèmes d'exploitation de type ix que vous utiliserez probablement . Le netstat OS X est ainsi, par exemple. Il a une option -p , mais il fait quelque chose de différent de netstat -p sur Linux.

Pour un numéro de port inhabituel comme celui de votre question, vous pouvez généralement vous en sortir sans append le lsof , car il est peu probable qu'une machine donnée ait des programmes se connectant au port et l'écoutant. Il peut être utile de l'append avec des numéros de port comme HTTP 80, où il est probable que vous aurez plusieurs programmes utilisant ce port à la fois.

Il est heureux que l'option -s soit facultative dans de nombreuses situations, car cette utilisation ne fonctionne qu'avec la version lsof de lsof et plus récente. Dans les anciennes versions, -s signifiait autre chose entièrement! C'est un changement de millésime 2008, mais il peut encore mordre de façon inattendue. RHEL 5 est livré avec lsof 4.78, par exemple.

Vous pouvez utiliser netstat -anp | grep 57010 netstat -anp | grep 57010 sur le server C. Mais cela ne fonctionnera que s'il n'y a pas de pare-feu entre les deux qui mappe le port 57010 à un port différent.

Juste pour être complet:

Utilisation de ss partir du nouvel set d'outils du réseau Linux ( iproute2 ):

 ss -tp sport = :57010 dst 192.168.1.220