Come sapere quali porte sono ascoltate da determinati PID?


13

Ho un PID di un certo processo in ascolto di alcune porte sul mio OS X e ho bisogno di sapere quali porte sono ascoltate da questo processo. Come posso farlo?

So che posso usare lsofper sapere quale processo sta ascoltando una porta, ma devo eseguire un'operazione inversa.

Grazie.

UPD

OS X usa utility BSD, quindi ho BSD netstatnon Linux netstat. Linux netstatha -pun'opzione per mostrare i PID, BSD netstatusa -pper specificare la porta e non ha alcuna opzione per mostrare PID.


Intendi dire che stai cercando di trovare le porte su cui un processo è in ascolto? netstatpuoi farlo per te. È possibile grepsul PID se si desidera filtrare l'output dinetstat
Centimane il

anche l' lsofuso non è solo un modo. puoi fare qualcosa del genere lsof|grep ${PID}. che scaricherà rozzamente tutto e grepsceglierà le linee con PID in esse. In una buona occasione, potrebbe elencare una linea irrilevante, a causa del numero PID che corrisponde erroneamente ad un altro valore ma le probabilità sono scarse a nessuno
MelBurslan

@Dave, sì, mi segui bene. Tuttavia, come posso vedere, la versione BSD di netstatnon può visualizzare i PID.
shau-kote,

@MelBurslan non sembra una soluzione ordinata. Inoltre non è veloce - richiede del tempo sul mio MBP.
shau-kote,

Risposte:


13

Ho trovato una soluzione da solo leggendo attentamente man lsof. (Sì, RT * M aiuta ancora.) Grazie @Gilles per aver mirato.

Ecco la soluzione: lsof -aPi -p 555 (555 è il PID).

Spiegazione:

  1. -p per specificare il numero PID;
  2. -i per visualizzare solo i dispositivi di rete;
  3. -a a AND due condizioni precedenti (altrimenti saranno ORed);
  4. -P per visualizzare i numeri di porta (invece i nomi delle porte per impostazione predefinita).

Inoltre, è possibile utilizzare lsof -aPi4 -p 555o lsof -aPi6 -p 55per gli indirizzi IPv4 o IP6 solo di conseguenza.

Se l'output verrà analizzato da un'altra -Fnopzione del programma potrebbe essere utile. Con questa opzione lsofprodurrà "output per altro programma" invece di un output formattato piacevole. lsof -aPi4 -Fn -p 555produrrà qualcosa del genere:

p554
nlocalhost:4321

PS Tutto ciò che ho provato sul mio OS X El Capitan, ma come posso vedere dovrebbe funzionare anche su Linux.


6

lsoffornisce informazioni sui file aperti dai processi, comprese le porte di rete. È disponibile praticamente su tutti i sistemi unix, incluso OSX .

La Stele di Rosetta per Unix non elenca qualsiasi altro strumento per “processo di corrispondenza per il file o la porta” su OSX.

Per elencare i processi in ascolto su una porta TCP, è possibile utilizzare

lsof -iTCP -sTCP:LISTEN

lsof -iUDPelenca i processi con un socket UDP aperto. lsof -ielenca tutti i socket di rete aperti (client TCP, server TCP e altri protocolli IP).


0

se vuoi sapere quale porta è in ascolto puoi usare l'opzione -p di netstat. Devi essere il superutente:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

se vuoi saperne di più prova questo link


Riguarda GNU netstat, ho OS X e quindi uso BSD netstat. Usa -pper specificare la porta TCP / IP e non ha l'opzione per visualizzare PID.
shau-kote,

0

Su FreeBSD, puoi usare sockstatper queste informazioni. Non sono sicuro che OS X abbia sockstat, poiché non ho un Mac.

Ad esempio, per vedere tutte le connessioni TCPv4:

sockstat -4


Alack, non c'è sockstatcomando sul mio Mac. :(
shau-kote,

0

Puoi concatenare netstat con grep, awk e sed per mostrare le porte con i loro pid corrispondenti su Linux e Cygwin:

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

Più dettagli

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.