Come usare netstat su Linux

Un prompt terminale sul desktop di un computer Linux.
Fatmawati Achmad Zaenuri / Shutterstock

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

netstat -a | meno in una finestra terminale

L'elenco include i socket TCP (IP), TCP6 (IPv6) e UDP.

Uscita da netstat -a | meno in una finestra terminale

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 rappresenta SO_ACCEPTON, il che significa che il socket è in attesa di una richiesta di connessione. SO_WAITDATA, mostrato come W, significa che ci sono dati in attesa di essere letti. SO_NOSPACE, mostrato come N, 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

netstat -at | meno in una finestra terminale

La visualizzazione è notevolmente ridotta. I pochi socket elencati sono tutti socket TCP.

Uscita da netstat -at | meno in una finestra terminale

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

netstat -au | meno in una finestra terminale

Sono elencati solo i socket UDP.

Uscita da netstat -au | meno in una finestra terminale

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

netstat -l | meno in una finestra terminale

Le prese elencate sono quelle che si trovano nello stato di ascolto.

Output di netstat -l | meno in una finestra terminale

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

netstat -lt | meno in una finestra terminale

Ora vediamo solo socket di ascolto TCP.

output da netstat -lt | meno in una finestra terminale

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

netstat -st | meno in una finestra terminale

Viene visualizzata una raccolta di statistiche per le connessioni TCP less.

Output da netstat -st | meno in una finestra terminale

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

sudo netstat -p -at in una finestra di terminale

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

sudo netstat -an | meno in una finestra terminale

Gli indirizzi IP sono mostrati come valori numerici. Vengono inoltre visualizzati i numeri di porta, separati da due punti ” : “Dall'indirizzo IP.

Uscita da sudo netstat -an | meno in una finestra terminale

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

sudo netstat -r in una finestra di terminale

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"

sudo netstat -anp | grep "sshd" in una finestra del terminale

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"

sudo netstat -anp | grep ": 22" in una finestra terminale

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

Tabella dell'interfaccia del kernel in una finestra del terminale

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 il lo 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

sudo netstat -g in una finestra terminale

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.

Articoli correlati

Ultimi articoli