
Linux netstat
Il comando fornisce un tesoro di informazioni sulle connessioni di rete, le porte in uso e i processi che le utilizzano. Impara come usarlo.
Porte, processi e protocolli
Le prese di rete possono essere connesse o in attesa di una connessione. Le connessioni utilizzano protocolli di rete come Transport Control Protocol (TCP) o User Datagram Protocol UDP. Usano gli indirizzi del protocollo Internet e le porte di rete per stabilire connessioni.
La parola prese potrebbe evocare immagini di un punto di connessione fisico per un cavo o un cavo, ma in questo contesto, un socket è un costrutto software utilizzato per gestire un'estremità di una connessione dati di rete.
I socket hanno due stati principali: lo sono entrambi collegato e facilitare una comunicazione di rete in corso, o lo sono in attesa per una connessione in entrata per connettersi a loro. Ci sono altri stati, come lo stato in cui un socket è a metà strada attraverso la creazione di una connessione su un dispositivo remoto, ma mettendo da parte gli stati transitori, puoi pensare a un socket come connesso o in attesa (che viene spesso chiamato ascoltando).
La presa di ascolto si chiama servere il socket che richiede una connessione con il socket di ascolto viene chiamato a cliente. Questi nomi non hanno nulla a che fare con i ruoli hardware o computer. Definiscono semplicemente il ruolo di ciascun socket a ciascuna estremità della connessione.
Il netstat
Il comando consente di scoprire quali socket sono collegati e quali socket sono in ascolto. Significato, ti dice quali porte sono in uso e quali processi le stanno usando. Può mostrare tabelle di routing e statistiche sulle interfacce di rete e connessioni multicast.
La funzionalità di netstat
è stato replicato nel tempo in diverse utility Linux, come ip e ss. Vale ancora la pena conoscere questo nonno di tutti i comandi di analisi di rete, perché è disponibile su tutti i sistemi operativi Linux e Unix e persino su Windows e Mac.
Ecco come usarlo, completo di comandi di esempio.
Elenco di tutti i socket
Il -a
(tutte) l'opzione fa netstat
mostra tutte le prese connesse e in attesa. Questo comando è suscettibile di produrre un lungo elenco, quindi lo inseriamo less
.
netstat -a | less
L'elenco include i socket TCP (IP), TCP6 (IPv6) e UDP.
L'avvolgimento nella finestra del terminale rende un po 'difficile vedere cosa sta succedendo. Ecco un paio di sezioni di quell'elenco:
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp6 0 0 (::):ssh (::):* LISTEN tcp6 0 0 ip6-localhost:ipp (::):* LISTEN . . . Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 24 ( ) DGRAM 12831 /run/systemd/journal/dev-log unix 2 ( ACC ) STREAM LISTENING 24747 @/tmp/dbus-zH6clYmvw8 unix 2 ( ) DGRAM 26372 /run/user/1000/systemd/notify unix 2 ( ) DGRAM 23382 /run/user/121/systemd/notify unix 2 ( ACC ) SEQPACKET LISTENING 12839 /run/udev/control
La sezione “Internet attivo” elenca le connessioni esterne collegate e le prese locali in ascolto di richieste di connessione remota. Ossia, elenca le connessioni di rete che sono (o saranno) stabilite a dispositivi esterni.
La sezione “Dominio UNIX” elenca le connessioni interne connesse e in ascolto. In altre parole, elenca le connessioni che sono state stabilite all'interno del computer tra diverse applicazioni, processi ed elementi del sistema operativo.
Le colonne “Internet attivo” sono:
- Proto: Il protocollo utilizzato da questo socket (ad esempio, TCP o UDP).
- Recv-Q: La coda di ricezione. Questi sono byte in entrata che sono stati ricevuti e bufferizzati, in attesa del processo locale che utilizza questa connessione per leggerli e utilizzarli.
- Invia-Q: La coda di invio. Questo mostra i byte che sono pronti per essere inviati dalla coda di invio.
-
Indirizzo locale: I dettagli dell'indirizzo dell'estremità locale della connessione. L'impostazione predefinita è per
netstat
per mostrare il nome host locale per l'indirizzo e il nome del servizio per la porta. - Indirizzo straniero: L'indirizzo e il numero di porta dell'estremità remota della connessione.
- Stato: Lo stato del socket locale. Per i socket UDP, di solito è vuoto. Vedi il stato tabella che segue.
Per le connessioni TCP, il stato il valore può essere uno dei seguenti:
- ASCOLTA: Solo lato server. Il socket è in attesa di una richiesta di connessione.
- SYN-SENT: Solo lato client. Questo socket ha effettuato una richiesta di connessione ed è in attesa di vedere se verrà accettato.
- SYN-RICEVUTE: Solo lato server. Questo socket è in attesa di conferma della connessione dopo aver accettato una richiesta di connessione.
- STABILITO: Server e client. È stata stabilita una connessione funzionante tra il server e il client, consentendo il trasferimento dei dati tra i due.
- FIN-WAIT-1: Server e client. Questo socket è in attesa di una richiesta di terminazione della connessione dal socket remoto o di un riconoscimento di una richiesta di terminazione della connessione precedentemente inviata da questo socket.
- FIN-WAIT-2: Server e client. Questo socket è in attesa di una richiesta di terminazione della connessione dal socket remoto.
- CLOSE-WAIT: Server e client. Questo socket è in attesa di una richiesta di terminazione della connessione da parte dell'utente locale.
- CHIUSURA: Server e client. Questo socket è in attesa di conferma della richiesta di terminazione della connessione dal socket remoto.
- LAST-ACK: Server e client. Questo socket è in attesa di conferma della richiesta di terminazione della connessione inviata al socket remoto.
- TEMPO DI ATTESA: Server e client. Questo socket ha inviato un riconoscimento al socket remoto per informarlo che ha ricevuto la richiesta di terminazione del socket remoto. Ora è in attesa di assicurarsi che il riconoscimento sia stato ricevuto.
- CHIUSO: Non è presente alcuna connessione, quindi il socket è stato chiuso.
Le colonne “Dominio Unix” sono:
- Proto: Il protocollo utilizzato da questo socket. Sarà “unix”.
- RefCnt: Conteggio dei riferimenti. Il numero di processi collegati collegati a questo socket.
-
Flags: Questo è di solito impostato su
ACC
, che rappresentaSO_ACCEPTON
, il che significa che il socket è in attesa di una richiesta di connessione.SO_WAITDATA
, mostrato comeW
, significa che ci sono dati in attesa di essere letti.SO_NOSPACE
, mostrato comeN
, significa che non c'è spazio per scrivere i dati nel socket (ovvero, il buffer di invio è pieno). - Genere: Il tipo di socket. Vedi il genere tabella che segue.
- Stato: Lo stato del socket. Vedi il stato tabella che segue.
- I-Node: L'inode del file system associato a questo socket.
- Sentiero: Il percorso del file system al socket.
Il socket del dominio Unix genere può essere uno dei seguenti:
- dgram: Il socket viene utilizzato in modalità datagramma, utilizzando messaggi di lunghezza fissa. I datagrammi non sono garantiti come affidabili, sequenziati o non duplicati.
- STREAM: Questo socket è un socket di flusso. Questo è il tipo “normale” comune di connessione socket. Queste prese sono progettate per fornire una consegna in sequenza affidabile (in ordine) dei pacchetti.
- CRUDO: Questo socket viene utilizzato come socket raw. I socket grezzi operano a livello di rete del modello OSI e non fanno riferimento alle intestazioni TCP e UDP dal livello di trasporto.
- RDM: Questo socket si trova su un'estremità di una connessione messaggi recapitata in modo affidabile.
- seqpacket: Questo socket funziona come un socket di pacchetto sequenziale, che è un altro mezzo per fornire consegna di pacchetti affidabile, sequenziale e non duplicata.
- PACCHETTO: Presa di accesso all'interfaccia non elaborata. I socket di pacchetto vengono utilizzati per ricevere o inviare pacchetti grezzi a livello di driver di dispositivo (ovvero livello di collegamento dati) del modello OSI.
Il socket del dominio Unix stato può essere uno dei seguenti:
- GRATUITO: Questo socket non è allocato.
- ASCOLTANDO: Questo socket è in attesa di richieste di connessione in entrata.
- COLLEGAMENTO: Questo socket è in fase di connessione.
- COLLEGATO: È stata stabilita una connessione e il socket è in grado di ricevere e trasmettere dati.
- SCOLLEGAMENTO: La connessione sta per essere terminata.
Wow, sono molte informazioni! Molti dei netstat
le opzioni perfezionano i risultati in un modo o nell'altro, ma non cambiano troppo il contenuto. Diamo un'occhiata.
Elenco dei socket per tipo
Il netstat -a
Il comando può fornire più informazioni di quelle che devi vedere. Se vuoi o hai solo bisogno di vedere i socket TCP, puoi usare il -t
(TCP) opzione per limitare la visualizzazione per mostrare solo socket TCP.
netstat -at | less
La visualizzazione è notevolmente ridotta. I pochi socket elencati sono tutti socket TCP.
Il -u
(UDP) e -x
Le opzioni (UNIX) si comportano in modo simile, limitando i risultati al tipo di socket specificato nella riga di comando. Ecco l'opzione -u (UDP) in uso:
netstat -au | less
Sono elencati solo i socket UDP.
Elenco di socket per stato
Per vedere le prese che sono nello stato di ascolto o di attesa, utilizzare il -l
(ascolto) opzione.
netstat -l | less
Le prese elencate sono quelle che si trovano nello stato di ascolto.
Questo può essere combinato con le opzioni -t (TCP, -u (UDP) e -x (UNIX) per approfondire ulteriormente i socket di interesse. Cerchiamo di ascoltare socket TCP:
netstat -lt | less
Ora vediamo solo socket di ascolto TCP.
Statistiche di rete per protocollo
Per visualizzare le statistiche per un protocollo, utilizzare il -s
(statistiche) e passa in -t
(TCP), -u
(UDP), o -x
(UNIX) opzioni. Se usi semplicemente il -s
(statistiche) da solo, vedrai le statistiche per tutti i protocolli. Controlliamo le statistiche per il protocollo TCP.
netstat -st | less
Viene visualizzata una raccolta di statistiche per le connessioni TCP less
.
Visualizzazione di nomi di processo e PID
Può essere utile vedere l'ID processo (PID) del processo usando un socket, insieme al nome di quel processo. Il -p
L'opzione (programma) fa proprio questo. Vediamo quali sono i PID e i nomi dei processi per i processi che utilizzano un socket TCP che si trova in stato di ascolto. Noi usiamo sudo
per essere sicuri di ricevere tutte le informazioni disponibili, comprese quelle che normalmente richiederebbero i permessi di root.
sudo netstat -p -at
Ecco l'output in una tabella formattata:
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:domain 0.0.0.0:* LISTEN 6927/systemd-resolv tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 751/sshd tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 7687/cupsd tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 1176/master tcp6 0 0 (::):ssh (::):* LISTEN 751/sshd tcp6 0 0 ip6-localhost:ipp (::):* LISTEN 7687/cupsd tcp6 0 0 ip6-localhost:smtp (::):* LISTEN 1176/master
Abbiamo una colonna aggiuntiva chiamata “PID / nome del programma”. Questa colonna elenca il PID e il nome del processo utilizzando ciascuno dei socket.
Elenco degli indirizzi numerici
Un altro passo che possiamo fare per rimuovere alcune ambiguità è quello di visualizzare gli indirizzi locali e remoti come indirizzi IP anziché il loro dominio risolto e nomi host. Se usiamo il -n
(numerico) opzione, gli indirizzi IPv4 sono mostrati in formato decimale puntato:
sudo netstat -an | less
Gli indirizzi IP sono mostrati come valori numerici. Vengono inoltre visualizzati i numeri di porta, separati da due punti ” :
“Dall'indirizzo IP.
Un indirizzo IP di 127.0.0.1 indica che il socket è associato all'indirizzo di loopback del computer locale. Puoi pensare a un indirizzo IP di 0.0.0.0 come “percorso predefinito” per gli indirizzi locali e “qualsiasi indirizzo IP” per gli indirizzi stranieri. Indirizzi IPv6 visualizzati come “::
“Sono anche tutti indirizzi zero.
Le porte elencate possono essere facilmente controllate per vedere qual è il loro scopo abituale:
- 22: Questa è la porta di ascolto Secure Shell (SSH).
- 25: Questa è la porta di ascolto SMTP (Simple Mail Transfer Protocol).
- 53: Questa è la porta di ascolto DNS (Domain Name System).
- 68: Questa è la porta di ascolto DHCP (Dynamic Host Configuration Protocol).
- 631: Questa è la porta di ascolto del sistema di stampa UNIX comune (CUPS).
RELAZIONATO: Qual è la differenza tra 127.0.0.1 e 0.0.0.0?
Visualizzazione della tabella di routing
Il -r
L'opzione (route) visualizza la tabella di routing del kernel.
sudo netstat -r
Ecco l'output in una tabella accurata:
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default Vigor.router 0.0.0.0 UG 0 0 0 enp0s3 link-local 0.0.0.0 255.255.0.0 U 0 0 0 enp0s3 192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
Ed ecco cosa significano le colonne:
- Destinazione: La rete di destinazione o il dispositivo host di destinazione (se la destinazione non è una rete).
-
Gateway: L'indirizzo del gateway. Un asterisco “
*
“Appare qui se non è impostato un indirizzo gateway. - Genmask: La maschera di sottorete per il percorso.
- Flags: Vedi il bandiere tabella che segue.
- MSS: Dimensione massima del segmento predefinita per le connessioni TCP su questa route: si tratta della più grande quantità di dati che possono essere ricevuti in un segmento TCP.
- Finestra: La dimensione della finestra predefinita per le connessioni TCP su questa route, che indica il numero di pacchetti che possono essere trasferiti e ricevuti prima che il buffer di ricezione sia pieno. In pratica, i pacchetti vengono consumati dall'applicazione ricevente.
- irtt: Il tempo di andata e ritorno iniziale. A questo valore fa riferimento il kernel per apportare modifiche dinamiche ai parametri TCP per connessioni remote che rispondono lentamente.
- Io affronto: L'interfaccia di rete da cui vengono trasmessi i pacchetti inviati su questa route.
Il bandiere il valore può essere uno di:
- U: Il percorso è su.
- H: Target è un host e l'unica destinazione possibile su questa rotta.
- G: Usa il gateway.
- R: Ripristina il percorso per il routing dinamico.
- D: Installato dinamicamente dal demone di routing.
- M: Modificato dal daemon di routing quando ha ricevuto un pacchetto ICMP (Internet Control Message Protocol).
-
UN: Installato da
addrconf
, il generatore di file di configurazione DNS e DHCP automatizzato. - C: Voce cache.
- !: Rifiuta percorso.
Trovare la porta utilizzata da un processo
Se eseguiamo il pipe dell'output di netstat
attraverso grep
, possiamo cercare un processo per nome e identificare la porta che sta utilizzando. Noi usiamo il -a
(tutti), -n
(numerico) e -p
(programma) opzioni utilizzate in precedenza e cerca “sshd”.
sudo netstat -anp | grep "sshd"
grep
trova la stringa di destinazione e vediamo che il sshd
il demone sta usando la porta 22.
Naturalmente, possiamo anche farlo al contrario. Se cerchiamo “: 22”, possiamo scoprire quale processo utilizza quella porta, se presente.
sudo netstat -anp | grep ":22"
Questa volta grep
trova la stringa di destinazione “: 22” e vediamo che il processo che utilizza questa porta è il sshd
demone, ID processo 751.
Elencare le interfacce di rete
Il -i
(interfacce) mostrerà una tabella delle interfacce di rete che netstat
può scoprire.
sudo netstat -i
Ecco l'output in un modo più leggibile:
Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enp0s3 1500 4520671 0 0 0 4779773 0 0 0 BMRU lo 65536 30175 0 0 0 30175 0 0 0 LRU
Ecco cosa significano le colonne:
-
Io affronto: Il nome dell'interfaccia. Il
enp0s3
interfaccia è l'interfaccia di rete per il al di fuori mondo e illo
l'interfaccia è l'interfaccia di loopback. L'interfaccia di loopback consente ai processi di comunicare tra loro entro il computer utilizzando i protocolli di rete, anche se il computer non è collegato a una rete. - MTU: L'unità di trasmissione massima (MTU). Questo è il “pacchetto” più grande che può essere inviato. Consiste in un'intestazione contenente flag di protocollo e di routing e altri metadati, oltre ai dati che vengono effettivamente trasportati.
- RX-OK: Il numero di pacchetti ricevuti, senza errori.
- RX-ERR: Il numero di pacchetti ricevuti, con errori. Vogliamo che questo sia il più basso possibile.
- RX-DRP: Il numero di pacchetti persi (ovvero persi). Vogliamo anche che questo sia il più basso possibile.
- RX-OVR: Numero di pacchetti persi a causa di overflow durante la ricezione. Questo di solito significa che il buffer di ricezione era pieno e non poteva accettare altri dati, ma erano stati ricevuti più dati che dovevano essere eliminati. Più bassa è questa cifra, migliore è e zero è perfetto.
- TX-OK: Il numero di pacchetti trasmessi, senza errori.
- RX-ERR: Il numero di pacchetti trasmessi, con errori. Vogliamo che questo sia zero.
- RX-DRP: Il numero di pacchetti persi durante la trasmissione. Idealmente, questo dovrebbe essere zero.
- RX-OVR: Il numero di pacchetti persi a causa di overflow durante la trasmissione. Questo di solito significa che il buffer di invio era pieno e non poteva accettare altri dati, ma erano pronti per essere trasmessi più dati e dovevano essere scartati.
- FLG: Bandiere. Vedi il bandiere tabella che segue.
Il bandiere rappresentano quanto segue:
- B: È in uso un indirizzo di trasmissione.
- L: Questa interfaccia è un dispositivo di loopback.
- M: Tutti i pacchetti vengono ricevuti (cioè in modalità promiscua). Nulla viene filtrato o scartato.
- O: Il protocollo di risoluzione dell'indirizzo (ARP) è disattivato per questa interfaccia.
- P: Questa è una connessione Point-to-Point (PPP).
- R: L'interfaccia è in esecuzione.
- U: L'interfaccia è attiva.
Elenca le iscrizioni ai gruppi multicast
In poche parole, una trasmissione multicast consente di inviare un pacchetto una sola volta, indipendentemente dal numero di destinatari. Per servizi come lo streaming video, ad esempio, ciò aumenta l'efficienza dal punto di vista del mittente di una quantità enorme.
Il -g
(gruppi) opzione rende netstat
elencare l'appartenenza al gruppo multicast dei socket su ciascuna interfaccia.
sudo netstat -g
Le colonne sono abbastanza semplici:
- Interfaccia: Il nome dell'interfaccia su cui sta trasmettendo il socket.
- RefCnt: Il conteggio dei riferimenti, ovvero il numero di processi collegati al socket.
- Gruppo: Il nome o l'identificatore del gruppo multicast.
I nuovi bambini sul blocco
I comandi route, ip, ifconfig e ss possono fornire molte cose netstat
è in grado di mostrarti. Sono tutti ottimi comandi e vale la pena dare un'occhiata.
Ci siamo concentrati su netstat
perché è universalmente disponibile, indipendentemente dal sistema operativo di tipo Unix su cui stai lavorando, anche da quelli oscuri.