- Dave McKay
@TheGurkha
- 17 febbraio 2020, 8:00 EDT
Linux netstat
comando ti dà un vero e proprio tesoro di informazioni sulle connessioni di rete, le porte sono in uso, e i processi che li utilizzano. Impara come usarlo.
Porte, processi e protocolli
I socket di rete possono essere collegati o in attesa di una connessione., Le connessioni utilizzano protocolli di rete come Transport Control Protocol (TCP) o User Datagram Protocol UDP. Usano indirizzi di protocollo Internet e porte di rete per stabilire connessioni.
La parola socket 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: sono collegati e facilitano una comunicazione di rete in corso, oppure sono in attesa di 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, si può pensare a un socket come connesso o in attesa (che viene spesso chiamato ascolto).
Il socket di ascolto è chiamato server e il socket che richiede una connessione con il socket di ascolto è chiamato client., 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 comandonetstat
consente di scoprire quali socket sono collegati e quali socket sono in ascolto. Significa, ti dice quali porte sono in uso e quali processi li stanno usando. Può mostrare tabelle di routing e statistiche sulle interfacce di rete e le connessioni multicast.
La funzionalità di netstat
è stata replicata 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-like, e anche su Windows e Mac.
Ecco come usarlo, completo di comandi di esempio.
Elenco di tutti i socket
L’opzione-a
(all) rendenetstat
mostra tutti i socket collegati e in attesa. Questo comando è in grado di produrre un lungo elenco, quindi lo inseriamo in less
.,
netstat -a | less
L’elenco include socket TCP (IP), TCP6 (IPv6) e UDP.
Il wrap-around nella finestra del terminale rende un po ‘ difficile vedere cosa sta succedendo. Ecco un paio di sezioni da quell’elenco:
La sezione “Internet attivo” elenca le connessioni esterne connesse e i socket locali in ascolto per le richieste di connessione remota. Cioè, elenca le connessioni di rete che sono (o saranno) stabilite per dispositivi esterni.,
La sezione “UNIX domain” 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 “Active Internet” sono:
- Proto: Il protocollo utilizzato da questo socket (ad esempio, TCP o UDP).
- Recv-Q: La coda di ricezione. Si tratta di byte in entrata che sono stati ricevuti e vengono bufferizzati, in attesa che il processo locale che utilizza questa connessione li legga e li consumi.,
- Send-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 della fine locale della connessione. Il valore predefinito è per
netstat
per mostrare il nome host locale per l’indirizzo e il nome del servizio per la porta. - Indirizzo estero: L’indirizzo e il numero di porta dell’estremità remota della connessione.
- Stato: Lo stato del socket locale. Per i socket UDP, questo è solitamente vuoto. Vedere la tabella di stato, sotto.,
Per le connessioni TCP, il valore di stato può essere uno dei seguenti:
- LISTEN: solo lato server. Il socket è in attesa di una richiesta di connessione.
- SYN-SENT: solo lato client. Questo socket ha fatto una richiesta di connessione ed è in attesa di vedere se sarà accettato.
- SYN-RECEIVED: solo lato server. Questo socket è in attesa di un riconoscimento di connessione dopo aver accettato una richiesta di connessione.
- STABILITO: Server e client. È stata stabilita una connessione di lavoro 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 una conferma della richiesta di terminazione della connessione dal socket remoto.
- ULTIMO-ACK: Server e client. Questo socket è in attesa di un riconoscimento 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 è stato ricevuto.
- CHIUSO: non c’è connessione, quindi il socket è stato terminato.,
Le colonne “Unix domain” sono:
- Proto: Il protocollo utilizzato da questo socket. Sarà ” unix.”
- RefCnt: Conteggio dei riferimenti. Il numero di processi collegati collegati a questo socket.
- Flag: 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 dati sul socket (cioè, il buffer di invio è pieno). - Tipo: Il tipo di socket. Vedere la tabella dei tipi di seguito.
- Stato: Lo stato del socket. Vedere la tabella di stato qui sotto.
- I-Node: L’inode del file system associato a questo socket.
- Percorso: Il percorso del file system al socket.
Il tipo di socket del dominio Unix può essere uno dei seguenti:
- DGRAM: Il socket viene utilizzato in modalità datagramma, utilizzando messaggi di lunghezza fissa., I datagrammi non sono né garantiti per essere affidabili, sequenziati, né non duplicati.
- STREAM: Questa presa è una presa di corrente. Questo è il tipo “normale” comune di connessione socket. Questi socket sono progettati per fornire una consegna sequenziata (in ordine) affidabile dei pacchetti.
- RAW: questo socket viene utilizzato come socket raw. I socket raw operano a livello di rete del modello O e non fanno riferimento alle intestazioni TCP e UDP dal livello di trasporto.
- RDM: Questo socket si trova su un’estremità di una connessione di messaggi consegnati in modo affidabile.,
- SEQPACKET: questo socket funziona come un socket sequenziale di pacchetti, che è un altro mezzo per fornire una consegna di pacchetti affidabile, sequenziata e non duplicata.
- PACCHETTO: Presa di accesso interfaccia raw. I socket dei pacchetti vengono utilizzati per ricevere o inviare pacchetti raw al livello del driver di periferica (ad esempio, data link layer) del modelloSI.
Lo stato del socket del dominio Unix può essere uno dei seguenti:
- LIBERO: Questo socket non è allocato.
- ASCOLTO: questo socket è in ascolto per le richieste di connessione in entrata.,
- COLLEGAMENTO: Questa presa è in fase di collegamento.
- COLLEGATO: è stata stabilita una connessione e la presa è in grado di ricevere e trasmettere dati.
- DISCONNESSIONE: la connessione è in procinto di essere terminata.
Wow, che è un sacco di informazioni! Molte delle opzioninetstat
perfezionano i risultati in un modo o nell’altro, ma non modificano troppo il contenuto. Diamo un’occhiata.,
Listing Sockets by Type
Il comandonetstat -a
può fornire più informazioni di quelle che devi vedere. Se si desidera o si desidera visualizzare solo i socket TCP, è possibile utilizzare l’opzione-t
(TCP) per limitare la visualizzazione a mostrare solo socket TCP.
netstat -at | less
Il display out è notevolmente ridotto. I pochi socket elencati sono tutti socket TCP.,
Le opzioni-u
(UDP) e-x
(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 dei socket per stato
Per visualizzare i socket che si trovano nello stato di ascolto o di attesa, utilizzare l’opzione-l
(ascolto).
netstat -l | less
I socket elencati sono quelli che si trovano nello stato di ascolto.,
Questo può essere combinato con le opzioni-t (TCP, -u (UDP) e-x (UNIX) per accedere ulteriormente ai socket di interesse. Cerchiamo i socket TCP in ascolto:
netstat -lt | less
Ora vediamo solo i socket TCP in ascolto.
Statistiche di rete per protocollo
netstat -st | less
Una raccolta di statistiche per le connessioni TCP viene visualizzata in less
.
Mostrando i nomi dei processi e PID
Può essere utile vedere l’ID del processo (PID) del processo utilizzando un socket, insieme al nome di quel processo., L’opzione-p
(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 nello stato di ascolto. Usiamo sudo
per assicurarci di ricevere tutte le informazioni disponibili, incluse tutte le informazioni che normalmente richiedono i permessi di root.
sudo netstat -p -at
Ecco l’output in una tabella formattata:
Abbiamo una colonna aggiuntiva chiamata “PID / nome del programma.”Questa colonna elenca il PID e il nome del processo utilizzando ciascuno dei socket.,
Elenco indirizzi numerici
Un altro passo che possiamo fare per rimuovere alcune ambiguità è quello di visualizzare gli indirizzi locali e remoti come indirizzi IP invece del loro dominio risolto e nomi host. Se usiamo l’opzione-n
(numerico), gli indirizzi IPv4 vengono visualizzati in formato decimale punteggiato:
sudo netstat -an | less
Gli indirizzi IP vengono visualizzati come valori numerici. Vengono mostrati anche 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. Si può pensare a un indirizzo IP di 0.0.0.0 come significato del ” percorso predefinito “per gli indirizzi locali e” qualsiasi indirizzo IP” per gli indirizzi stranieri. Gli indirizzi IPv6 mostrati come “” sono anche tutti gli indirizzi zero.
Le porte che sono elencate possono essere facilmente controllate per vedere quale sia il loro scopo abituale:
- 22: Questa è la porta di ascolto Secure Shell (SSH).
- 25: Questa è la porta di ascolto Simple Mail Transfer Protocol (SMTP).
- 53: Questa è la porta di ascolto DNS (Domain Name System).,
- 68: Questa è la porta di ascolto Dynamic Host Configuration Protocol (DHCP).
- 631: Questa è la porta di ascolto Common UNIX Printing System (CUPS).
CORRELATI: qual è la differenza tra 127.0.0.1 e 0.0.0.0?
Visualizzazione della tabella di routing
L’opzione-r
(route) visualizza la tabella di routing del kernel.,
sudo netstat -r
Ecco l’output in una tabella ordinata:
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
E, 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 un indirizzo gateway non è impostato.
- Genmask: La subnet mask per il percorso.
- Bandiere: Vedere la tabella bandiere, sotto.,
- MSS: dimensione massima predefinita del segmento per le connessioni TCP su questa rotta-questa è la maggiore quantità di dati che può essere ricevuta in un segmento TCP.
- Finestra: la dimensione predefinita della finestra per le connessioni TCP su questa rotta, 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 iniziale di andata e ritorno. Questo valore viene fatto riferimento dal kernel per apportare modifiche dinamiche ai parametri TCP per le connessioni remote che sono lente a rispondere.,
- Iface: L’interfaccia di rete da cui vengono trasmessi i pacchetti inviati su questa rotta.
Il valore dei flag può essere uno di:
- U: Il percorso è in alto.
- H: Target è un host e l’unica destinazione possibile su questa rotta.
- G: Utilizzare il gateway.
- R: Ripristinare il percorso per il routing dinamico.
- D: Installato dinamicamente dal demone di routing.
- M: Modificato dal demone di routing quando ha ricevuto un pacchetto ICMP (Internet Control Message Protocol).,
- A: Installato da
addrconf
, il generatore automatico di file di configurazione DNS e DHCP. - C: Voce della cache.
- !: Rifiuta percorso.
Trovare la porta utilizzata da un processo
Se pipe l’output dinetstat
attraversogrep
, possiamo cercare un processo per nome e identificare la porta che sta usando. Utilizziamo le opzioni-a
(all),-n
(numeric) e-p
(program) utilizzate in precedenza e cerchiamo “sshd.,”
sudo netstat -anp | grep "sshd"
grep
trova la stringa di destinazione e vediamo che il demone sshd
sta usando la porta 22.
Naturalmente, possiamo anche farlo al contrario. Se cerchiamo”: 22″, possiamo scoprire quale processo sta usando quella porta, se presente.
sudo netstat -anp | grep ":22"
Questa voltagrep
trova la stringa di destinazione “:22” e vediamo che il processo che utilizza questa porta è il demonesshd
, ID processo 751.,
Elenca le interfacce di rete
L’opzione-i
(interfacce) visualizzerà una tabella delle interfacce di rete chenetstat
può scoprire.
sudo netstat -i
Ecco l’output in 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
Questo è ciò che significano le colonne:
- Iface: Il nome dell’interfaccia. Il
enp0s3
interfaccia è l’interfaccia di rete per il mondo esterno, e illo
interfaccia è il loopback interfaccia., L’interfaccia di loopback consente ai processi di intercomunicare all’interno del computer utilizzando protocolli di rete, anche se il computer non è connesso a una rete. - MTU: L’unità di trasmissione massima (MTU). Questo è il più grande “pacchetto” che può essere inviato. Consiste in un’intestazione contenente flag di routing e protocollo e altri metadati, oltre ai dati 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 eliminati (cioè 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 più dati, ma più dati sono stati ricevuti e hanno dovuto essere scartati. Più bassa è questa cifra, meglio è 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 rilasciati 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 più dati, ma più dati era era pronto per essere trasmesso e doveva essere scartato.
- Flg: Bandiere. Vedi la tabella delle bandiere qui sotto.
I flag rappresentano quanto segue:
Elenca le appartenenze 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, questo aumenta l’efficienza dal punto di vista del mittente di una quantità enorme.
L’opzione-g
(gruppi) rendenetstat
elencare l’appartenenza al gruppo multicast di socket su ciascuna interfaccia.
sudo netstat -g
Le colonne sono abbastanza semplici:
- Interfaccia: Il nome dell’interfaccia su cui il socket sta trasmettendo.
- RefCnt: Il conteggio dei riferimenti, che è il numero di processi collegati al socket.,
- Gruppo: Il nome o l’identificatore del gruppo multicast.
I nuovi ragazzi sul blocco
I comandi route, ip, ifconfig e ss possono fornire molto di ciò che netstat
è in grado di mostrarti. Sono tutti grandi comandi e vale la pena di verificare.
Ci siamo concentrati sunetstat
perché è universalmente disponibile, indipendentemente dal sistema operativo Unix-like su cui stai lavorando, anche quelli oscuri.,
Dave McKay ha usato per la prima volta i computer quando il nastro di carta punzonato era in voga, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come responsabile della protezione dei dati. Dave è un evangelista di Linux e fautore dell’open source.Leggi la Biografia completa ”