Come posso elencare le mie porte di rete aperte con netstat?


206

Vorrei elencare le mie porte di rete aperte nel Terminale con comandi integrati. Come quello che so, netstatè il comando da usare. Ma sto lottando per ricavarne informazioni utili.

Come posso elencare le mie porte aperte con netstat? Qualche flag specifico che mi aiuta in questo caso?

Risposte:


309
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)

2
Grazie! Tuttavia, l'output è piuttosto difficile da leggere, ma è lsofstato un po 'meglio, grazie.
Jonas,

12
È necessario utilizzare sudo lsof .... Senza sudo, lsof può vedere solo i processi che possiedi e quindi non mostrerà alcuna porta aperta dai processi di sistema. Inoltre, puoi saltare il comando grep dicendo a lsof che vuoi solo vedere le porte nello stato LISTEN con sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson,

1
→ grgarside: fai attenzione agli effetti dei grep -i "listen"tuoi 2 esempi.
dan

1
Con GNU netstat, puoi facoltativamente elencare il pid del processo che ha aperto ciascuna porta. C'è un modo per ottenere quel comportamento anche con BSD netstat?
Chris,

2
Ho appena fatto, si -vscopre che la bandiera si accende. Il pid sarà nella penultima penultima.
Chris,

64

forse puoi usare lsof:

lsof -Pn -i4

-i4 indica solo l'indirizzo IPv4 e le porte -P e -n output veloce

uscita in questo modo

  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)

2
Cosa fa questo comando?
Nohillside

3
lsofelenca i file aperti. I socket di rete vengono conteggiati come file, pertanto ogni socket di rete aperto (in ascolto o in uso attivo) verrà elencato in lsof.
Craig Trader,

Mostra anche l'id del processo (netstat no)
lib

1
lsof -Pn -i6per IPV6
Jared Burrows,

2
Almeno una mia macchina, questa risposta richiede 0,1 secondi, mentre @ grgarside è di 28+ secondi. La differenza è lo -i4switch, per guardare solo gli indirizzi IPv4.
Assapora Cubranic il

8

Il metodo più semplice è usare netstat:

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

... senza alcun filtro aggiunto, in modo da ottenere le intestazioni corrette e vedere entrambi i server in ascolto e le connessioni già stabilite in entrambe le direzioni. In questo esempio, la prima riga mostra una connessione dal mio Mac verso 17.172.233.109, che un ulteriore:

whois 17.172.233.109

mi ha insegnato che si trova in Apple.


6

Innanzitutto, non sono un esperto di BSD, ma come l'OP volevo l'equivalente approssimativo di eseguire quanto segue su una scatola * nix o qualcosa di simile:

netstat -tulpn

Ho letto altre domande / risposte che offrono lsof * e netstat * su MacOS e volevo ancora qualcosa con un output più compatto. Quindi, questo è ciò che ho rapidamente messo insieme:

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

È un po 'eccessivo, quindi ho aggiunto colore all'output per una buona misura. Dal momento che non sarò in grado di ricordare, o non voglio scrivere, questo colosso. L'ho messo in una funzione bash e poi lo chiamo appena necessario. Ecco la funzione bash detta:

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

Ho una piccola raccolta di queste funzioni di convenienza in un file che provengo da ~ / .bash_profile o ~ / .zshrc. Questo viene aggiunto alla raccolta. Sarebbe interessante vedere altre opportunità per rendere questo più bello / più sottile.

Uscita campione:

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service

Per favore, non pubblicare gif di Terminale bot incolla il testo qui formattato come codice. È difficile copiare e anche leggere se hai bisogno di caratteri grandi
user151019

L'immagine non è una gif, è solo una schermata che mostra l'output. Se fai clic, vedrai che è un PNG. Ospitato su imgur .. ma questo è ciò che StackExchange di default immagino. Ad ogni modo, se stai cercando uno screenshot diverso, posso riprenderlo.
kroolk,

OK nel mio commento sostituisci GIF con screenshot non importa quale formato. Il punto è che dovrebbe essere text
user151019

Poiché rimuovendo il comando lungo dall'output di esempio, ora funzionerebbe meglio come screenshot, poiché non c'è nulla che debba essere copiato da esso e dal momento che può anche ritagliare meglio di prima.
mwfearnley,
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.