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

Sous Linux, je peux utiliser netstat -pntl | grep $PORT 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?

Sur macOS High Sierra, utilisez cette commande:

 lsof -nP -i4TCP:$PORT | grep LISTEN 

Sur les anciennes versions, utilisez l’une des formes suivantes:

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

Remplacez $PORT par le numéro de port ou une liste de numéros de port séparés par des virgules.

Ajoutez le sudo (suivi d’un espace) si vous avez besoin d’informations sur les ports ci-dessous # 1024.

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

L’indicateur -P d’afficher les numéros de port bruts au lieu des noms résolus tels que http , ftp ou des noms de services plus ésotériques tels que dpserve , socalia .

Voir les commentaires pour plus d’options.

Vous pouvez aussi utiliser:

 sudo lsof -i -n -P | grep TCP 

Cela fonctionne dans Mavericks.

Depuis Yosemite (10.10), jusqu’à High Sierra (10.13) , toutes les versions de macOS le permettent:

 sudo lsof -iTCP -sTCP:LISTEN -n -P 

Mise à jour janvier 2016

Vraiment surpris personne n’a suggéré:

 lsof -i :PORT_NUMBER 

pour obtenir les informations de base requirejses. Par exemple, en vérifiant le port 1337:

 lsof -i :1337 

Autres variations en fonction des circonstances:

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

Vous pouvez facilement tirer parti de cela pour extraire le PID lui-même. Par exemple:

 lsof -t -i :1337 

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

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

Illustration rapide:

entrer la description de l'image ici

Pour être complet, car souvent utilisé ensemble:

Pour tuer le PID:

 kill -9  # kill -9 60401 

ou comme un seul paquebot:

 kill -9 $(lsof -t -i :1337) 

Cela fonctionne dans Mavericks (OSX 10.9.2).

 sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN 

sous OS X, vous pouvez utiliser l’option -v pour que netstat donne 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 numéro avant la dernière colonne, 3105 pour ce cas

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

trouver le serveur fonctionnant sur le port 80

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

sortie de l’échantillon

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

Le 2ème de la dernière colonne est le PID. En haut, c’est 715 .

options

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

-n – affiche les nombres, ne cherche pas les noms. Cela rend la commande beaucoup plus rapide

-v – sortie verbeuse, pour obtenir les ID de processus

-w – Mots de recherche. Sinon, la commande renverra des informations pour les ports 8000 et 8001, pas seulement “80”

LISTEN – donne des informations uniquement pour les ports en mode LISTEN, c’est-à-dire les serveurs

Sur Snow Leopard (OS X 10.6.8), l’exécution de ‘man lsof’ génère:

 lsof -i 4 -a 

(l’entrée manuelle actuelle est ‘lsof -i 4 -a -p 1234’)

Les réponses précédentes ne fonctionnaient pas sur Snow Leopard, mais j’essayais d’utiliser ‘netstat -nlp’ jusqu’à ce que j’aie vu l’utilisation de ‘lsof’ dans la réponse par pts.

Je suis un gars de Linux. Sous Linux, il est extrêmement facile avec netstat -ltpn ou toute combinaison de ces lettres. Mais sous Mac OS X netstat -an | grep LISTEN netstat -an | grep LISTEN est le plus humain. D’autres sont très laids et très difficiles à retenir lors du dépannage.

 lsof -n -i | awk '{ print $1,$9; }' | sort -u 

Cela affiche qui fait quoi. Supprimez -n pour voir les noms d’hôte (un peu plus lent).

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, vous devriez peut-être créer une fonction bash et l’exporter avec un nom plus convivial, comme ça.

 vi ~/.bash_profile 

puis ajoutez les lignes suivantes dans ce fichier et enregistrez-le.

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

Maintenant, vous pouvez taper listening_on 80 dans votre terminal et voir quel processus écoute sur le port 80 .

Cela a fait ce dont j’avais besoin.

 ps -eaf | grep `lsof -t -i:$PORT` 

J’ai fait un petit script pour voir non seulement qui écoutait où mais aussi pour afficher les connexions établies et les pays. Fonctionne 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) 

Cela peut être utile pour vérifier si vous êtes connecté à la Corée du Nord! 😉

C’est un bon moyen sur macOS High Sierra:

 netstat -an |grep -i listen