it-swarm-fr.com

Déterminer quel processus est lié à un port

Je sais qu'en utilisant la commande:

lsof -i TCP 

(ou une variante de paramètres avec lsof) Je peux déterminer quel processus est lié à un port particulier. C'est utile de dire si j'essaie de démarrer quelque chose qui veut se lier à 8080 et que quelqu'un d'autre utilise déjà ce port, mais je ne sais pas quoi.

Existe-t-il un moyen simple de le faire sans utiliser lsof? Je passe du temps à travailler sur de nombreux systèmes et lsof n'est souvent pas installé.

92
user5721

netstat -lnp listera le pid et le nom du processus à côté de chaque port d'écoute. Cela fonctionnera sous Linux, mais pas tous les autres (comme AIX.) Ajoutez -t si vous voulez TCP uniquement.

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/Apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

etc.

120
Cakemox

Sous AIX, netstat & rmsock peuvent être utilisés pour déterminer la liaison de processus:

[[email protected]] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[[email protected]] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (Java).
12
frielp

Un autre outil disponible sur Linux est ss. Depuis la page man ss sur Fedora:

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

Exemple de sortie ci-dessous - la dernière colonne montre la liaison du processus:

[[email protected]] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))
8
frielp

Pour Solaris, vous pouvez utiliser pfiles puis grep par sockname: ou port:.

Un échantillon (de ici ):

pfiles `ptree | awk '{print $1}'` | egrep '^[0-9]|port:'
3

J'ai été une fois confronté à essayer de déterminer quel processus était derrière un port particulier (cette fois, c'était 8000). J'ai essayé une variété de lsof et netstat, mais j'ai ensuite tenté ma chance et essayé de frapper le port via un navigateur (c'est-à-dire http: // hostname: 8000 / ). Et voilà, un écran de démarrage m'a accueilli et il est devenu évident quel était le processus (pour mémoire, c'était Splunk ).

Une dernière pensée: "ps -e -o pid, args" (YMMV) peut parfois afficher le numéro de port dans la liste des arguments. Grep est votre ami!

2
rickumali