Domanda

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

È stato utile?

Soluzione

su MacOS High Sierra, utilizzare questo comando:

lsof -nP -i4TCP:$PORT | grep LISTEN

Per le versioni più vecchie, utilizzare una delle seguenti forme:

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

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

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

Il flag -n è per la visualizzazione di indirizzi IP invece dei nomi di host. Questo rende il comando di esecuzione molto più veloce, perché le ricerche DNS per ottenere i nomi host può essere lento (alcuni secondi o di un minuto per molti padroni di casa).

Il flag -P è per la visualizzazione dei numeri di porta prime invece di nomi risolti come http, ftp o nomi di servizio più esoterici come dpserve, socalia.

Si vedano i commenti per ulteriori opzioni.

Altri suggerimenti

Dal momento che Snow Leopard (10.6), fino a Mojave (10.14) , ogni versione di MacOS supporta questa:

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

Personalmente ho finire con questa semplice funzione nella mia ~/.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
}

Poi comando listening ti dà un elenco dei processi in ascolto su qualche porta e listening smth greps questo per un certo modello.

Avendo questo, è abbastanza facile per chiedere di particolare processo, per esempio listening dropbox o porta, ad esempio listening 22.

comando lsof ha alcune opzioni specializzate per aver chiesto informazioni porta, protocollo, ecc processo ma personalmente ho trovato sopra la funzione molto più a portata di mano, dal momento che non ho bisogno di ricordare tutte queste opzioni di basso livello. lsof è uno strumento molto potente, ma purtroppo non è così comodo da utilizzare.

È inoltre possibile utilizzare:

sudo lsof -i -n -P | grep TCP

Questo funziona in Mavericks.

Aggiornamento gennaio 2016

davvero sorpreso nessuno ha suggerito:

lsof -i :PORT_NUMBER

per ottenere le informazioni richieste. Per esempio, il controllo sulla porta 1337:

lsof -i :1337

Altre variazioni, a seconda delle circostanze:

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

Si può facilmente costruire su questo per estrarre il PID stesso. Ad esempio:

lsof -t -i :1337

che è anche equivalente (in seguito) per questo comando:

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

illustrazione rapida:

enter image description qui

Per completezza, perché spesso utilizzato insieme:

Per uccidere il PID:

kill -9 <PID>
# kill -9 60401

o come uno di linea:

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

Questo funziona in Mavericks (OSX 10.9.2).

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

su OS X è possibile utilizzare l'opzione -v per netstat per dare il pid associato.

Tipo:

netstat -anv | grep [.]PORT

L'output sarà simile a questa:

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

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

Per la LISTEN, stabilito e porte CHIUSO

sudo lsof -n -i -P | grep TCP

Per la LISTEN porti unico

sudo lsof -n -i -P | grep LISTEN

Per una specifica porta di ascolto, ad esempio: la porta 80

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

Se si desidera solo una sintesi compatta [nessun servizio / apps descritto], passare netstat. Il lato buono qui è, non sudo necessario

netstat -a -n | grep 'LISTEN '

illustrativa delle materie utilizzato:

-n sopprimere il nome host

-i per i protocolli IPv4 e IPv6

-P i nomi delle porte omettere

-a [sopra netstat] per tutte le prese

-n [oltre netstat] Non nomi risolvono, gli indirizzi di rete mostrano come numeri

  

Testato su High Sierra 10.13.3 e Mojave 10.14.3

     
      
  • l'ultima sintassi netstat funziona anche su Linux

  •   
  • lsof si può provare su Debian based: apt-get install lsof

  •   

su MacOS, ecco un modo facile per ottenere l'ID di processo che è in ascolto su una porta specifica con netstat . Questo esempio cerca di un processo del contenuto di porta 80:

trovare il server in esecuzione sulla porta 80

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

esempio di output

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

Il secondo dall'ultima colonna è il PID. In precedenza, è 715 .

Opzioni

-a - mostra tutti i porti, compresi quelli utilizzati dai server

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

-v - output dettagliato, per ottenere il processo ID

-w - parole di ricerca. In caso contrario, il comando restituirà informazioni per le porte 8000 e 8001, non solo "80"

LISTEN - informazioni danno solo per i porti in modalità listen, vale a dire i server

In ultima versione MacOS è possibile utilizzare questo comando:

lsof -nP -i4TCP:$PORT | grep LISTEN

Se si fatica a ricordare allora forse si dovrebbe creare una funzione bash ed esportarlo con un nome più amichevole in questo modo

vi ~/.bash_profile

e quindi aggiungere le seguenti righe al file e salvarlo.

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

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

On Snow Leopard (OS X 10.6.8), in esecuzione 'uomo lsof' rendimenti:

lsof -i 4 -a

(inserimento manuale attuale è 'lsof -i 4 -a -p 1234')

Le risposte precedenti non hanno funzionato su Snow Leopard, ma stava cercando di usare '-nlp netstat' fino a quando ho visto l'uso di 'lsof' nella risposta da pts.

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

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

Questa mostra chi sta facendo cosa. Rimuovere -n per vedere gli hostname (un po 'più lento).

Questo ha fatto quello che mi serviva.

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

Ho fatto un piccolo script per vedere non solo chi ascolta dove, ma anche per i collegamenti di visualizzazione stabilito e in cui i 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 si è connessi a nord-Corea! ; -)

Questo è un buon modo su MacOS High Sierra:

netstat -an |grep -i listen

Ispirato dall'utente Brent Auto:

lsof -i 4 -a | grep LISTEN

Per l'uso MacOS I due comandi insieme per mostrare le informazioni sui processi in ascolto sulla macchina e processo di connessione ai server remoti. In altre parole, per controllare le porte in ascolto e le attuali connessioni (TCP) su un host è possibile utilizzare i due seguenti comandi insieme

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

Il pensiero vorrei aggiungere il mio ingresso, speriamo che può finire per aiutare qualcuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top