web-dev-qa-db-fra.com

Qui écoute sur un port TCP donné sous 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 spécifié TCP. Comment obtenir les mêmes informations sur Mac OS X?

1208
pts

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.

1802
pts

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.

502

Vous pouvez aussi utiliser:

Sudo lsof -i -n -P | grep TCP

Cela fonctionne dans Mavericks.

424
Rog182

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:

enter image description here

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)
274
arcseldon

Cela fonctionne dans Mavericks (OSX 10.9.2).

Sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
79
Charley Wu

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.

39
Sean Hamilton

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

34
PYK

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:

trouver un serveur fonctionnant sur le port 80

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

exemple de sortie

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.

les options

-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

32
johntellsall

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.

18
arturgrigor

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.

12
Brent Self

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.

11
edib
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).

7

Cela a fait ce dont j'avais besoin.

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

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! ;-)

1
0x00

C’est une bonne solution sur macOS High Sierra:

netstat -an |grep -i listen
0
tr4nc3

Inspiré par l'utilisateur Brent Self:

lsof -i 4 -a | grep LISTEN

0
Punnerud

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.

0
Boschko