478 votes

Comment savoir quel programme écoute sur un port donné ?

Je soupçonne un programme d'écouter sur le port 8000 sur ma machine.

Lorsque j'exécute la commande suivante, j'obtiens cette erreur :

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

Si j'utilise un autre port ( 8000 est la valeur par défaut), le serveur web fonctionne bien.

Si je cours wget localhost:8000 à partir de la ligne de commande, il renvoie 404 Not Found .

Que puis-je faire (ou quels sont les outils disponibles) pour trouver le programme qui écoute sur le port 8000 et à partir de là, où ce programme est configuré ?

466voto

Zian Choy Points 1510

Ouvrez votre terminal et tapez comme

lsof -i :8000

cette commande vous donnera la liste des applications utilisées par ce port avec le PID. (Si aucun résultat n'est obtenu via sudo car il se peut que vous n'ayez pas la permission d'accéder à certains processus).

Par exemple, avec le port 8000 ( python3 -m http.server ) :

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

Et le port 22 (SSH) :

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

J'espère que cela vous aidera.

7 votes

Cela fonctionne aussi sur OSX pour ce que ça vaut.....

5 votes

Ajout de -s TCP:LISTEN restreint le résultat à la socket d'écoute réelle et à son processus.

2 votes

Si vous recherchez le port 8000, vous obtenez PID 1889 ? wat

429voto

Amy Points 8019

Vous pouvez utiliser netstat pour voir quel processus écoute sur quel port.

Vous pouvez utiliser cette commande pour avoir un détail complet :

sudo netstat -peanut

si vous avez besoin de savoir exactement lequel écoute sur le port 8000, vous pouvez utiliser ceci :

sudo netstat -peanut | grep ":8000 "

Il n'y a aucun processus qui peut se cacher de netstat.

143 votes

netstat -peanut est plus facile à retenir que netstat -taupen ¡!

11 votes

Bien joué ! - Je viens de modifier la réponse afin de refléter votre commentaire. Merci.

5 votes

'fuser -k 8000/tcp' pour libérer ce port

178voto

Falco Points 101

Pour approfondir la réponse de @33833, vous pouvez obtenir des informations très détaillées, par exemple :

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Je peux voir ici que Squid est le processus, mais c'est en fait mon squid-deb-proxy qui occupe le port.

Un autre bon exemple d'application java :

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Vous pouvez voir dans lsof (LiSt Open Files) qu'il s'agit de java, ce qui est moins qu'utile. En exécutant le ps avec le PID, on voit tout de suite que c'est CrashPlan.

11 votes

En une seule commande : lsof -t -i :8000 | xargs ps -fp

9 votes

J'ai dû préfixer sudo mais après ça, ça a marché pour moi. Merci.

5 votes

Note : sans sudo vous n'obtiendrez pas d'erreur, vous n'obtiendrez simplement rien comme réponse.

14voto

korjjj Points 466

Essayez ss de iproute2 paquet :

ss -nlp | grep 8000

5 votes

ss possède également ses propres capacités de filtrage : ss -nlp '( sport = :8000 )' .

8voto

user.dz Points 45060

Une autre façon d'utiliser socklist de procinfo paquet :

man socklist

DESCRIPTION
socklist est un script Perl qui vous donne une liste de toutes les sockets ouvertes, en énumérant les types, le port, inode, uid, pid, fd et le programme auquel il appartient.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X