Chi sta ascoltando su una determinata porta TCP su Mac OS X?

Su Linux, posso usare netstat -pntl | grep $PORT netstat -pntl | grep $PORT o fuser -n tcp $PORT per scoprire quale processo (PID) è in ascolto sulla porta TCP specificata. Come ottengo le stesse informazioni su Mac OS X?

Su macOS High Sierra, usa questo comando:

 lsof -nP -i4TCP:$PORT | grep LISTEN 

Nelle versioni precedenti, utilizzare una delle seguenti forms:

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

Sostituire $PORT con il numero di porta o un elenco separato da virgole di numeri di porta.

Prependa sudo (seguito da uno spazio) se hai bisogno di informazioni sulle porte sotto # 1024.

Il flag -n serve per visualizzare gli indirizzi IP invece dei nomi host. Questo rende il comando eseguito molto più velocemente, perché le ricerche DNS per ottenere i nomi degli host possono essere lente (alcuni secondi o un minuto per molti host).

L’indicatore -P indica la visualizzazione di numeri di porta grezzi anziché nomi risolti come http , ftp o più nomi di servizi esoterici come dpserve , socalia .

Vedi i commenti per ulteriori opzioni.

Puoi anche usare:

 sudo lsof -i -n -P | grep TCP 

Questo funziona in Mavericks.

Da Yosemite (10.10), fino ad High Sierra (10.13) , ogni versione di macOS supporta questo:

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

Aggiornamento gennaio 2016

Davvero sorpreso nessuno ha suggerito:

 lsof -i :PORT_NUMBER 

per ottenere le informazioni di base richieste. Ad esempio, controllando la porta 1337:

 lsof -i :1337 

Altre varianti, a seconda delle circostanze:

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

Si può facilmente build su questo per estrarre il PID stesso. Per esempio:

 lsof -t -i :1337 

che è anche equivalente (nel risultato) a questo comando:

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

Illustrazione veloce:

inserisci la descrizione dell'immagine qui

Per completezza, perché frequentemente usati insieme:

Per uccidere il PID:

 kill -9  # kill -9 60401 

o come un unico rivestimento:

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

Funziona con Mavericks (OSX 10.9.2).

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

su OS X è ansible utilizzare l’opzione -v per netstat per fornire il pid associato.

genere:

 netstat -anv | grep [.]PORT 

l’output sarà simile a questo:

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

Il PID è il numero prima dell’ultima colonna, 3105 per questo caso

Su macOS, ecco un modo semplice per ottenere l’ID di processo che è in ascolto su una porta specifica con netstat . Questo esempio cerca un processo che serve il contenuto sulla porta 80:

trova il server in esecuzione sulla porta 80

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

uscita di esempio

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

Il 2 ° dall’ultima colonna è il PID. In sopra, è 715 .

opzioni

-a – mostra tutte le porte, incluse quelle usate dai server

-n – mostra i numeri, non cercare i nomi. Questo rende il comando molto più veloce

-v – output dettagliato, per ottenere gli ID di processo

-w – cerca parole. Altrimenti il ​​comando restituirà informazioni per le porte 8000 e 8001, non solo “80”

LISTEN : fornisce informazioni solo per le porte in modalità LISTEN, ovvero i server

Su Snow Leopard (OS X 10.6.8), l’esecuzione di ‘man lsof’ produce:

 lsof -i 4 -a 

(l’immissione manuale effettiva è ‘lsof -i 4 -a -p 1234’)

Le risposte precedenti non funzionavano con Snow Leopard, ma stavo cercando di usare ‘netstat -nlp’ fino a quando ho visto l’uso di ‘lsof’ nella risposta di pts.

Sono un ragazzo di Linux. In Linux è estremamente facile con netstat -ltpn o qualsiasi combinazione di quelle lettere. Ma in Mac OS X netstat -an | grep LISTEN netstat -an | grep LISTEN è il più umano. Altri sono molto brutti e molto difficili da ricordare durante la risoluzione dei problemi.

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

Questo mostra chi sta facendo cosa. Rimuovi -n per vedere i nomi degli host (un po ‘più lento).

Sull’ultima versione di macOS puoi usare questo comando:

 lsof -nP -i4TCP:$PORT | grep LISTEN 

Se lo trovi difficile da ricordare, forse dovresti creare una funzione bash ed esportarla con un nome più amichevole come questo

 vi ~/.bash_profile 

e quindi aggiungere le seguenti righe a quel file e salvarlo.

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

Ora puoi digitare listening_on 80 nel tuo terminale e vedere quale processo è in ascolto sulla porta 80 .

Questo ha fatto ciò di cui avevo bisogno.

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

Ho realizzato una piccola sceneggiatura per vedere non solo chi sta ascoltando dove ma anche per mostrare connessioni stabilite e in quali paesi. Funziona su 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) 

Questo può essere utile per verificare se sei connesso a Nord-Corea! 😉

Questo è un buon modo su macOS High Sierra:

 netstat -an |grep -i listen