Chi ascolta su una determinata porta TCP su Mac OS X?


1382

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


27
Spiacenti, netstat -p tcp | grep $PORTnon visualizza i PID poiché netstat su Mac OS X non può visualizzare i PID.
punti

12
netstat -anvvisualizza la porta su Mac OS X (fonte: soluzione sotto di @SeanHamiliton)
Curtis Yallop

Risposte:


2049

Su macOS High Sierra e versioni successive, utilizzare questo comando:

lsof -nP -iTCP:$PORT | grep LISTEN

o per vedere solo IPv4:

lsof -nP -i4TCP:$PORT | grep LISTEN

Nelle versioni precedenti, utilizzare uno dei seguenti moduli:

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

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

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

Il -nflag serve per visualizzare gli indirizzi IP anziché i nomi host. Questo rende l'esecuzione del comando molto più veloce, poiché le ricerche DNS per ottenere i nomi host possono essere lente (diversi secondi o un minuto per molti host).

La -Pbandiera è per la visualizzazione dei numeri grezzi di porta al posto di nomi risolti come http, ftpo nomi di servizi più esoterici come dpserve, socalia.

Vedi i commenti per ulteriori opzioni.

Per completezza, perché usati frequentemente insieme:

Per uccidere il PID:

kill -9 <PID>
# kill -9 60401

154
Aggiungi questo prefisso sudoper vedere i processi che non possiedi.
Gordon Davisson,

30
su lion, ha lavorato con un cambiamentosudo lsof -i TCP:$PORT | grep LISTEN
dhaval

58
Su Mountain Lion, non è necessario grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-

16
dopo così tante ricerche questo è il migliore. le persone che vogliono direttamente copiare il comando dovrebbero sostituire $ PORT con il numero di porta effettivo o definire la variabile PORT e anche quella per più porte come: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh

2
Non è necessario sudo se la porta da investigare è superiore a 1024.
stigkj

626

Da Snow Leopard (10.6), fino a Mojave (10.14) e Catalina (10,15) , ogni versione di macOS supporta questo:

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

Personalmente ho finito con questa semplice funzione nel mio ~/.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
}

Quindi il listeningcomando ti dà un elenco di processi in ascolto su alcune porte e lo listening smthgreps per alcuni pattern.

Detto questo, è abbastanza facile fare domande su particolari processi, ad es listening dropbox. O porta, ad es listening 22.

lsofIl comando ha alcune opzioni specializzate per chiedere porta, protocollo, processo ecc. ma personalmente ho trovato la funzione sopra molto più utile, dal momento che non ho bisogno di ricordare tutte queste opzioni di basso livello. lsofè uno strumento abbastanza potente, ma purtroppo non è così comodo da usare.


7
Questo sta succedendo nei miei dotfile. Cerco ogni pochi mesi e trovo sempre questa risposta.
danemacmillan,

1
Sento che questa dovrebbe essere una risposta accettata come ha detto OP -pntl, il che elencherebbe tutti i servizi. La risposta accettata richiede di specificare uno o più numeri di porta, che non è lo stesso in remoto.
Seeafish

440

Puoi anche usare:

sudo lsof -i -n -P | grep TCP

Questo funziona in Mavericks.


3
L' -iopzione lo rende significativamente più veloce. 0,02 secondi contro 2 secondi. Nella mia applicazione questo ha fatto la differenza.
Eric Boehs,

cosa fanno quei flag specifici -i, -n, -P. Non riesco a trovare da nessuna parte cosa significhino esattamente
Chad Watkins,

sudo lsof -i -n -P | grep TCP | grep $ PORT - Ho creato un alias con questo comando
alyn000r

Suggerirei di aggiungere "| grep $ PORT" o "| grep LISTEN"
KC Baltz,

Grande! Funziona anche su Mojave.
Gefilte Fish,

291

Aggiornamento gennaio 2016

Davvero sorpreso nessuno ha suggerito:

lsof -i :PORT_NUMBER

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

lsof -i :1337

Altre variazioni, a seconda delle circostanze:

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

Puoi facilmente basarci 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 rapida:

inserisci qui la descrizione dell'immagine

Per completezza, perché usati frequentemente insieme:

Per uccidere il PID:

kill -9 <PID>
# kill -9 60401

o come una fodera:

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

2
Questo comando visualizza anche PID non listener e le domande esplicitamente poste solo ai listener.
punti

3
Puoi anche correre lsof -t -i :1338. -trestituirà l'id del processo, quindi non sarà necessario awk / head.
KFunk,

Niente ha funzionato se non kill -9 $(lsof -t -i :5000)su el capitan
goksel il

Questo è fantastico Preferisco sapere cosa c'è prima di ucciderlo, quindi (sulla base di questo) ho appena aggiunto al mio bashrc:, whatsonport() { ps -ef | grep `lsof -t -i :$1` }quindi:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried

1
Grazie, ha lsof -i :PORT_NUMBERfatto un lavoro per me.
marika.daboja,


48

Per le porte ASCOLTA, STABILITO e CHIUSO

sudo lsof -n -i -P | grep TCP

Solo per le porte LISTEN

sudo lsof -n -i -P | grep LISTEN

Per una porta LISTEN specifica, ad esempio: porta 80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

O se vuoi solo un riepilogo compatto [nessun servizio / app descritto], vai su NETSTAT. Il lato positivo è che non è necessario il sudo

netstat -a -n | grep 'LISTEN '

Spiegare gli oggetti usati:

-n sopprime il nome host

-i per i protocolli IPv4 e IPv6

-P omette i nomi delle porte

-a [over netstat] per tutti i socket

-n [su netstat] non risolve i nomi, mostra gli indirizzi di rete come numeri

Testato su High Sierra 10.13.3 e Mojave 10.14.3

  • l'ultima sintassi netstat funziona anche su linux

Le spiegazioni dettagliate sono in realtà molto utili per i principianti come me. grazie @PYK
Tomaz Wang

46

su OS X puoi usare l'opzione -v per netstat per dare il pid associato.

genere:

netstat -anv | grep [.]PORT

l'output sarà simile al seguente:

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

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


Devi anche aggiungere grep LISTENper mostrare solo gli ascoltatori.
punti

3
Questo è quello di cui avevo bisogno! lsofimpossibile trovare la porta. ma ha netstatdimostrato che era aperto. -vera la salsa segreta che mi mancava.
Aaron McMillin,

32

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

trova il server in esecuzione sulla porta 80

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

uscita campione

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

Il 2 ° dall'ultima colonna è il PID. Sopra, sono 715 .

opzioni

-a - mostra tutte le porte, comprese quelle utilizzate 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à ASCOLTA, ovvero i server


2
la bandiera -v
ce l'ha

18

Nell'ultima versione di macOS è possibile utilizzare questo comando:

lsof -nP -i4TCP:$PORT | grep LISTEN

Se ti è difficile ricordare, allora forse dovresti creare una bashfunzione ed esportarla con un nome più amichevole come quello

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 il listening_on 80tuo Terminale e vedere quale processo è in ascolto sulla porta 80.


13

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 su Snow Leopard, ma stavo cercando di usare 'netstat -nlp' fino a quando non ho visto l'uso di 'lsof' nella risposta di pts.


10

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


2
La domanda chiedeva esplicitamente una porta TCP specifica e i tuoi comandi mostrano i listener su tutte le porte.
Punti

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

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


1
La tua risposta non è male, ma è su una domanda con diverse risposte molto votate, e accettata, di diversi anni fa. In futuro, prova a concentrarti su domande più recenti, in particolare quelle a cui non è stata ancora data risposta.

Questo comando visualizza anche porte non TCP e anche non ascoltatori? La domanda richiede esplicitamente listener solo su porte TCP.
punti

Come da lsof (8) pagina man: If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Misha Tavkhelidze,

@Misha Tavkhelidze: Quindi mostra anche i non ascoltatori, quindi non risponde alla domanda.
punti

Aggiungi -sTCP:LISTENalsof
Misha Tavkhelidze l'

3

Questo ha fatto quello di cui avevo bisogno.

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

1

Ho realizzato una piccola sceneggiatura per vedere non solo chi sta ascoltando dove ma anche per mostrare connessioni stabilite e con 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 collegato alla Corea del Nord! ;-)


0

Questo è un buon modo su macOS High Sierra:

netstat -an |grep -i listen

Proprio così! La risposta accettata in realtà è il modo giusto ... netstat su mac os x non mostra il pid alla mappatura delle porte.
tr4nc3,

0

Ispirato dall'utente Brent Self:

lsof -i 4 -a | grep LISTEN


0

Per macOS utilizzo due comandi insieme per mostrare informazioni sui processi in ascolto sulla macchina e sui processi di connessione ai server remoti. In altre parole, per controllare le porte di ascolto e le connessioni correnti (TCP) su un host è possibile utilizzare insieme i due comandi seguenti

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

Ho pensato di aggiungere il mio contributo, speriamo che possa finire per aiutare qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.