Qui écoute sur un port TCP donné sur Mac OS X?

sous Linux, je peux utiliser netstat -pntl | grep $PORT ou fuser -n tcp $PORT pour savoir quel processus (PID) écoute sur le port TCP spécifié. Comment puis-je obtenir les mêmes informations sur Mac OS X?

985
demandé sur pts 2010-12-12 15:30:02

14 réponses

sur macOS High Sierra, utilisez cette commande:

lsof -nP -i4TCP:$PORT | grep LISTEN

sur les versions plus anciennes, utilisez l'un des formulaires suivants:

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

remplacer $PORT par le numéro de port ou une liste séparée par une virgule des numéros de port.

Prepend sudo (suivi d'un espace) si vous avez besoin d'informations sur les ports au-dessous du #1024.

le drapeau -n est pour afficher des adresses IP au lieu de des noms d'hôte. Cela rend l'exécution de la commande beaucoup plus rapide, parce que les recherches DNS pour obtenir les noms d'hôtes peuvent être lentes (plusieurs secondes ou une minute pour de nombreux hôtes).

le drapeau -P est pour afficher des numéros de port bruts au lieu de noms résolus comme http , ftp ou des noms de service plus ésotériques comme dpserve , socalia .

Voir les commentaires pour plus d'options.

1501
répondu pts 2018-04-21 03:34:34

vous pouvez également utiliser:

sudo lsof -i -n -P | grep TCP

ça marche à Mavericks.

382
répondu Rog182 2014-01-22 22:13:59

depuis Yosemite (10.10), jusqu'à High Sierra (10.13) , chaque version de macOS supporte ceci:

sudo lsof -iTCP -sTCP:LISTEN -n -P
348
répondu Michał Kalinowski 2017-12-19 14:11:42

Mise À Jour Janvier 2016

Vraiment surpris de voir que personne n'a suggéré:

lsof -i :PORT_NUMBER

pour obtenir les informations de base nécessaires. Par exemple, vérification sur le port 1337:

lsof -i :1337

autres variantes, selon les circonstances:

sudo lsof -i :1337
lsof -i tcp:1337

vous pouvez facilement construire sur ce pour extraire le PID lui-même. Par exemple:

lsof -t -i :1337

qui est aussi équivalent (en résultat) à cette commande:

lsof -i :1337 | awk '{ print ; }' | head -n 2 | grep -v PID

Rapide illustration:

enter image description here

pour exhaustivité, car fréquemment utilisés ensemble:

tuer le PID:

kill -9 <PID>
# kill -9 60401

, ou comme une seule ligne:

kill -9 $(lsof -t -i :1337)
233
répondu arcseldon 2016-08-23 22:31:37

cela fonctionne dans Mavericks (OSX 10.9.2).

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
79
répondu Charley Wu 2014-12-11 12:27:11

sur OS X vous pouvez utiliser l'option-v pour netstat pour donner le pid associé.

type:

netstat -anv | grep [.]PORT

la sortie ressemblera à ceci:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

le PID est le nombre avant la dernière colonne, 3105 pour ce cas

28
répondu Sean Hamilton 2015-12-01 17:13:02

sur macOS, voici un moyen facile d'obtenir l'ID de processus qui est à l'écoute sur un port spécifique avec netstat . Cet exemple recherche un processus servant du contenu sur le port 80:

trouver un serveur tournant sur le port 80

netstat -anv | egrep -w [.]80.*LISTEN

sortie d'échantillon

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

le deuxième de la dernière colonne est le PID. En haut, c'est 715 .

options

-a - afficher tous les ports, y compris ceux utilisés par les serveurs

-n - montrez les numéros, ne cherchez pas les noms. Cela fait de la commande un lot plus rapide

-v - sortie verbose, pour obtenir l'IDs du processus

-w - mots de recherche. Sinon, la commande retournera les informations pour les ports 8000 et 8001, pas seulement "80"

LISTEN - donner des informations uniquement pour les ports en mode LISTEN, i.e. serveurs

27
répondu johntellsall 2018-01-14 22:20:11

Sur Snow Leopard (OS X 10.6.8), l'exécution de "l'homme de lsof' rendements:

lsof -i 4 -a

(entrée manuelle réelle: "lsof-i 4-A-p 1234")

les réponses précédentes ne fonctionnaient pas sur le léopard des neiges, mais j'ai essayé d'utiliser 'netstat-nlp' jusqu'à ce que j'ai vu l'utilisation de 'lsof' dans la réponse de pts.

12
répondu Brent Self 2013-08-25 19:14:09

sur la dernière version de macOS vous pouvez utiliser cette commande:

lsof -nP -i4TCP:$PORT | grep LISTEN

si vous avez du mal à vous en souvenir, alors peut-être que vous devriez créer une fonction bash et l'exporter avec un nom plus convivial comme celui-ci

vi ~/.bash_profile

, puis ajoutez les lignes suivantes à ce fichier et sauvegardez-le.

function listening_on() {
    lsof -nP -i4TCP:"" | grep LISTEN
}

maintenant vous pouvez taper listening_on 80 dans votre Terminal et voir quel processus est à l'écoute port 80 .

12
répondu arturgrigor 2018-06-05 12:32:23

Je suis un gars de Linux. Sous Linux, c'est extrêmement facile avec netstat -ltpn ou n'importe quelle combinaison de ces lettres. Mais dans Mac OS X netstat -an | grep LISTEN est le plus humain. D'autres sont très moches et très difficiles à se rappeler en cas de dépannage.

10
répondu edib 2016-09-28 21:35:05
lsof -n -i | awk '{ print ,; }' | sort -u

ça montre qui fait quoi. Retirez -n pour voir les noms d'hôtes (un peu plus lent).

7
répondu Misha Tavkhelidze 2014-05-03 09:41:26

ça a fait ce dont j'avais besoin.

ps -eaf | grep `lsof -t -i:$PORT`
2
répondu Frank 2017-05-10 08:29:24

j'ai fait un petit script pour voir non seulement qui écoute où mais aussi pour afficher les connexions établies et à quels pays. Travaux sur OSX Siera

#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | 
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
    printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | 
cut -d ">" -f2 | cut -d"<" -f1
done

printf "\ndisplaying listening ports\n\n"

sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35

#EOF

Sample output
checking established connections

107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States

displaying listening ports

mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)

ceci peut être utile pour vérifier si vous êtes connecté à la Corée du Nord! ;- )

0
répondu 0x00 2017-07-03 10:19:08

C'est une bonne manière sur macOS High Sierra:

netstat -an |grep -i listen
0
répondu tr4nc3 2018-08-15 17:49:55