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


Je soupçonne qu'un programme écoute sur le port 8000 sur ma machine.

Lorsque je lance 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 le paramètre par défaut), le serveur Web fonctionne correctement.

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

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


291
2018-04-06 08:36


origine




Réponses:


Ouvrez votre terminal et tapez comme

lsof -i :8000

cette commande vous listera l'application utilisée par ce port avec le PID. (Si aucun résultat ne fonctionne via sudo puisque vous ne pouvez avoir aucune permission pour 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 pourra aider.


189
2018-04-06 08:50



Cela fonctionne également sur OSX pour ce que ça vaut ..... - reevesy
Ajouter -s TCP:LISTEN restreint le résultat à la prise d'écoute réelle et à son processus. - jhermann
Si vous recherchez le port 8000, il renvoie PID 1889? wat - CodyBugstein
Oui, il existe un service avec le PID 1889 utilisant le port 8881. Est-ce que je manque quelque chose? - Ten-Coin
@Imray L'exemple recherche le port 8881. La colonne PID contient les ID de processus et la colonne NAME contient les ports. - Freek de Bruijn


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 "

Aucun processus ne peut se cacher de netstat.


329
2018-04-06 08:58



netstat -peanut est plus facile à retenir que netstat -taupen! - Douglas B. Staple
Un bon! - Juste édité la réponse afin de refléter votre commentaire. Je vous remercie. - Antoine Rodriguez
'fuser -k 8000 / tcp' pour libérer ce port - Jay Modi
si dans la colonne "PID / Nom du programme", vous voyez des tirets au lieu d'un nom de processus, vous avez oublié d'ajouter "sudo" - v.shashenko
donc c'est des cacahuètes hein - prusswan


Pour expliquer la réponse par @ 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 tout de suite que le calmar est le processus, mais il est actuellement mon squid-deb-proxy qui prend 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) que c'est java, ce qui est moins qu'utile. Courir le ps commande avec le PID que nous pouvons voir immédiatement que c'est CrashPlan.


164
2018-06-17 15:55



En une seule commande: lsof -t -i :8000 | xargs ps -fp - Brett Y
Je devais préfixer sudo  mais après ça a fonctionné pour moi. Merci. - Dwayne Crooks
note: sans sudo vous n'obtiendrez pas d'erreur, vous n'obtiendrez rien en guise de réponse. - Frank Nocke


Essayer ss de iproute2 paquet:

ss -nlp | grep 8000

10
2018-04-06 08:44



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


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

man socklist

LA DESCRIPTION
socklist est un script Perl qui vous donne une liste de tous les sockets ouverts, types d’énumération, 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

5
2018-06-29 10:23





Vous pouvez utiliser nmap.

Il est vraiment important de savoir quels ports sont ouverts sur votre PC, ceci   n'est pas seulement utile pour Linux, mais aussi pour d'autres systèmes d'exploitation,   Linux a beaucoup d'outils pour vérifier quels ports sont ouverts, le plus   common est nmap qui est un outil de ligne de commande, mais existe aussi un   FrontEnd graphique pour cela si vous préférez ainsi.1

pour l'installer, appuyez simplement sur Ctrl+Alt+T sur votre clavier pour ouvrir le terminal. Lorsqu'il s'ouvre, exécutez la commande ci-dessous:

sudo apt-get install nmap

Pour plus d'informations sur nmap et d'autres utilitaires, allez à Ici

1La source:garron.me


2
2018-04-06 08:46



nmap vous dira seulement qu'un port est ouvert, et non le processus qui l'a ouvert. - Andrew Burns
J'ai cliqué sur votre source pour lire [nmap] tries to guess which service is listening on each port, but it can make mistakes juste avant il suggère une méthode réelle pour savoir quel processus possède le socket. - GnP
@gnp Vous voudrez peut-être aussi regarder Ce. - Mitch♦
@Mitch je l'ai fait. Le PO doit connaître le PID exact d'un processus sur le système local. Nmap n'est pas le bon outil ici, même avec la détection de service et de version. Soit elle correspondra à un élément de la base de données nmaps, ce qui laissera toujours OP sur l'obscurité pour savoir quel processus tuer ou reconfigurer, ou elle ne le fera pas et OP aura une bonne empreinte digitale et un lien vers insecure.org. - GnP