Qui écoute sur un port TCP donné sur Mac OS X?
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.
vous pouvez également utiliser:
sudo lsof -i -n -P | grep TCP
ça marche à Mavericks.
depuis Yosemite (10.10), jusqu'à High Sierra (10.13) , chaque version de macOS supporte ceci:
sudo lsof -iTCP -sTCP:LISTEN -n -P
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:
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)
cela fonctionne dans Mavericks (OSX 10.9.2).
sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
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
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
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.
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
.
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.
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).
ça 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 à 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! ;- )
C'est une bonne manière sur macOS High Sierra:
netstat -an |grep -i listen