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