Sous Linux, je peux utiliser netstat -pntl | grep $PORT
ou fuser -n tcp $PORT
pour savoir quel processus (PID) écoute sur le port spécifié TCP. Comment 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’un des formulaires suivants:
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 ports séparés par des virgules.
Ajoutez le préfixe Sudo
(suivi d'un espace) si vous avez besoin d'informations sur les ports inférieurs à # 1024.
L’indicateur -n
sert à afficher les adresses IP au lieu des noms d’hôte. Cela accélère considérablement l'exécution de la commande, car les recherches DNS permettant d'obtenir les noms d'hôte peuvent être lentes (plusieurs secondes ou une minute pour de nombreux hôtes).
Le drapeau -P
sert à afficher les numéros de port bruts au lieu des noms résolus tels que http
, ftp
ou plusieurs noms de services ésotériques tels que dpserve
, socalia
.
Voir les commentaires pour plus d'options.
Depuis Snow Leopard (10.6), jusqu'à Mojave (10.14), chaque version de macOS prend en charge ceci:
Sudo lsof -iTCP -sTCP:LISTEN -n -P
Personnellement, je termine avec cette fonction simple dans mon ~/.bash_profile
:
listening() {
if [ $# -eq 0 ]; then
Sudo lsof -iTCP -sTCP:LISTEN -n -P
Elif [ $# -eq 1 ]; then
Sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}
Ensuite, la commande listening
vous donne une liste des processus d'écoute sur un port et listening smth
greps pour un motif donné.
Ayant cela, il est assez facile de poser des questions sur un processus particulier, par exemple. listening dropbox
, ou le port, par ex. listening 22
.
La commande lsof
possède des options spécialisées pour demander des informations sur le port, le protocole, le processus, etc. lsof
est un outil assez puissant, mais malheureusement pas très confortable à utiliser.
Vous pouvez aussi utiliser:
Sudo lsof -i -n -P | grep TCP
Cela fonctionne dans Mavericks.
Mise à jour janvier 2016
Vraiment surpris, personne n'a suggéré:
lsof -i :PORT_NUMBER
pour obtenir les informations de base requises. Par exemple, en vérifiant sur le port 1337:
lsof -i :1337
Autres variations, selon les circonstances:
Sudo lsof -i :1337
lsof -i tcp:1337
Vous pouvez facilement en tirer parti 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:
Pour être complet, car fréquemment utilisé ensemble:
Pour tuer le PID:
kill -9 <PID>
# kill -9 60401
ou comme une ligne:
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 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 numéro avant la dernière colonne, 3105 pour ce cas.
Pour les ports LISTEN, ESTABLISHED et CLOSED
Sudo lsof -n -i -P | grep TCP
Pour les ports LISTEN uniquement
Sudo lsof -n -i -P | grep LISTEN
Pour un port LISTEN spécifique, ex: port 80
Sudo lsof -n -i -P | grep ':80 (LISTEN)'
Ou si vous voulez juste un résumé compact [pas de service/applications décrites], allez par NETSTAT. Le bon côté est, pas besoin de Sudo
netstat -a -n | grep 'LISTEN '
expliquant les éléments utilisés:
- n supprimer le nom d'hôte
- i pour les protocoles IPv4 et IPv6
- P omettre les noms de port
- a [over netstat] pour tous les sockets
- n [sur netstat] ne résout pas les noms, affiche les adresses réseau sous forme de nombres
Testé sur High Sierra 10.13.3 et Mojave 10.14.3
la dernière syntaxe netstat fonctionne aussi sur Linux
lsof vous pouvez essayer avec Debian: apt-get install lsof
Sur macOS, voici un moyen simple d'obtenir l'ID de processus en cours d'écoute sur un port spécifique avec netstat . Cet exemple recherche un processus servant du contenu sur le port 80:
netstat -anv | egrep -w [.]80.*LISTEN
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.
-a
- affiche tous les ports, y compris ceux utilisés par les serveurs
-n
- affiche les chiffres, ne cherche pas de noms. Cela rend la commande plus rapide
-v
- sortie détaillée pour obtenir les ID de processus
-w
- mots de recherche. Sinon, la commande renverra des informations pour les ports 8000 et 8001, et pas seulement "80"
LISTEN
- donne des informations uniquement pour les ports en mode LISTEN, c'est-à-dire les serveurs
Sur la dernière version de macOS, vous pouvez utiliser cette commande:
lsof -nP -i4TCP:$PORT | grep LISTEN
Si vous avez du mal à vous souvenir, vous devriez peut-être créer une fonction bash
et l'exporter avec un nom plus convivial, tel que
vi ~/.bash_profile
puis ajoutez les lignes suivantes à ce fichier et enregistrez-le.
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
Vous pouvez maintenant taper listening_on 80
dans votre terminal et voir quel processus écoute sur le port 80
.
Sur Snow Leopard (OS X 10.6.8), exécutez "man lsof" pour obtenir:
lsof -i 4 -a
(la saisie manuelle 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 je voie l'utilisation de "lsof" dans la réponse de pts.
Je suis un gars Linux. Sous Linux, il est extrêmement facile d'utiliser netstat -ltpn
ou toute combinaison de ces lettres. Mais sous Mac OS X, 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).
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 écoute où, mais aussi pour afficher les connexions établies et pour quels 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é en Corée du Nord! ;-)
C’est une bonne solution sur macOS High Sierra:
netstat -an |grep -i listen
Inspiré par l'utilisateur Brent Self:
lsof -i 4 -a | grep LISTEN
Pour macOS, j’utilise deux commandes ensemble pour afficher des informations sur les processus d’écoute sur la machine et sur les processus de connexion à des serveurs distants. En d'autres termes, pour vérifier les ports d'écoute et les connexions (TCP) actuelles sur un hôte, vous pouvez utiliser les deux commandes suivantes ensemble
1. netstat -p tcp -p udp
2. lsof -n -i4TCP -i4UDP
Je pensais que je pourrais ajouter mes commentaires, j'espère que cela pourra aider quelqu'un.