GNU/Linux >> Linux Esercitazione >  >> Linux

10 esempi di base del comando Linux Netstat

Netstat

Netstat è un'utilità della riga di comando che può essere utilizzata per elencare tutte le connessioni di rete (socket) su un sistema. Elenca tutte le connessioni socket TCP, udp e le connessioni socket Unix.

Oltre alle prese connesse, può anche elencare le prese in ascolto in attesa di connessioni in entrata. Quindi verificando una porta 80 aperta puoi confermare se un server web è in esecuzione sul sistema o meno.

Questo lo rende uno strumento molto utile per gli amministratori di rete e di sistema.

In questo tutorial esamineremo alcuni esempi di come utilizzare netstat per trovare informazioni sulle connessioni di rete e le porte aperte su un sistema.

Ecco una rapida introduzione a netstat dalle pagine man

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

1. Elenca tutte le connessioni

Il primo e più semplice comando è elencare tutte le connessioni correnti. Basta eseguire il comando netstat con l'opzione a.

$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 enlightened:domain      *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp        0      0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED
tcp        0      0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN
udp        0      0 enlightened:domain      *:*
udp        0      0 *:bootpc                *:*
udp        0      0 enlightened.local:ntp   *:*
udp        0      0 localhost:ntp           *:*
udp        0      0 *:ntp                   *:*
udp        0      0 *:58570                 *:*
udp        0      0 *:mdns                  *:*
udp        0      0 *:49459                 *:*
udp6       0      0 fe80::216:36ff:fef8:ntp [::]:*
udp6       0      0 ip6-localhost:ntp       [::]:*
udp6       0      0 [::]:ntp                [::]:*
udp6       0      0 [::]:mdns               [::]:*
udp6       0      0 [::]:63811              [::]:*
udp6       0      0 [::]:54952              [::]:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     12403    @/tmp/dbus-IDgfj3UGXX
unix  2      [ ACC ]     STREAM     LISTENING     40202    @/dbus-vfs-daemon/socket-6nUC6CCx

Il comando sopra mostra tutte le connessioni da diversi protocolli come socket TCP, udp e unix. Tuttavia questo non è del tutto utile. Gli amministratori spesso vogliono selezionare connessioni specifiche in base a protocolli o numeri di porta, ad esempio.

2. Elenca solo le connessioni TCP o UDP

Per elencare solo le connessioni TCP usa le opzioni t.

$ netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 enlightened:domain      *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp        0      0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED
tcp        0      0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED
tcp        0      0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED
.....

Allo stesso modo, per elencare solo le connessioni udp, usa l'opzione u.

$ netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:34660                 *:*
udp        0      0 enlightened:domain      *:*
udp        0      0 *:bootpc                *:*
udp        0      0 enlightened.local:ntp   *:*
udp        0      0 localhost:ntp           *:*
udp        0      0 *:ntp                   *:*
udp6       0      0 fe80::216:36ff:fef8:ntp [::]:*
udp6       0      0 ip6-localhost:ntp       [::]:*
udp6       0      0 [::]:ntp                [::]:*

L'output sopra mostra sia le connessioni ipv4 che ipv6.

3. Disattiva la ricerca DNS inversa per un output più veloce

Per impostazione predefinita, il comando netstat tenta di scoprire il nome host di ciascun indirizzo IP nella connessione eseguendo una ricerca DNS inversa. Questo rallenta l'uscita. Se non è necessario conoscere il nome host ed è sufficiente solo l'indirizzo IP, sopprimere la ricerca del nome host con l'opzione n.

$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 192.168.1.2:49058       173.255.230.5:80        ESTABLISHED
tcp        0      0 192.168.1.2:33324       173.194.36.117:443      ESTABLISHED
tcp6       0      0 ::1:631                 :::*                    LISTEN

Il comando precedente mostra TUTTE le connessioni TCP senza risoluzione DNS. Fatto ? Bene.

4. Controlla le connessioni in ascolto - Apri le porte

Qualsiasi demone/servizio di rete mantiene una porta aperta per ascoltare le connessioni in entrata. Anche queste sono come connessioni socket e sono elencate da netstat. Per visualizzare solo le porte di ascolto, usa l'opzione "-l".

$ netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN

Ora possiamo vedere solo le porte/connessioni TCP in ascolto. Se vuoi vedere tutte le porte di ascolto, rimuovi l'opzione t. Se vuoi vedere solo le porte udp in ascolto, usa l'opzione "-u" invece di "-t".

Assicurati di rimuovere l'opzione "-a", altrimenti verrebbero elencate tutte le connessioni e non solo le connessioni in ascolto.

Se stai eseguendo un servizio come http o smtp sul tuo server Linux, puoi usare il comando sopra per verificare se il servizio sta ascoltando le connessioni in entrata o meno.

5. Ottieni nome processo/pid e ID utente

Quando si visualizzano le porte e le connessioni aperte/in ascolto, è spesso utile conoscere il nome del processo/pid che ha aperto quella porta o connessione.

Ad esempio, il server httpd di Apache apre la porta 80. Quindi, se vuoi controllare se un server http è in esecuzione o meno, o quale server http è in esecuzione, apache o nginx, quindi rintraccia il nome del processo.

I dettagli del processo sono resi disponibili dall'opzione 'p'.

~$ sudo netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1144/dnsmasq
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      661/cupsd
tcp6       0      0 ::1:631                 :::*                    LISTEN      661/cupsd

Quando si utilizza l'opzione p, netstat deve essere eseguito con i privilegi di root, altrimenti non può rilevare i pid dei processi in esecuzione con i privilegi di root e la maggior parte dei servizi come http e ftp spesso vengono eseguiti con i privilegi di root.

Insieme al nome del processo/pid è ancora più utile ottenere il nome utente/uid che possiede quel particolare processo. Usa l'opzione e insieme all'opzione p per ottenere anche il nome utente.

$ sudo netstat -ltpe
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 enlightened:domain      *:*                     LISTEN      root       11090       1144/dnsmasq
tcp        0      0 localhost:ipp           *:*                     LISTEN      root       9755        661/cupsd
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      root       9754        661/cupsd

L'esempio precedente elenca le connessioni in ascolto di tipo TCP con informazioni sul processo e informazioni estese.
Le informazioni estese contengono il nome utente e l'inode del processo. Questo è un comando utile per gli amministratori di rete.

Nota - Se utilizzi l'opzione n con l'opzione e, verrà elencato l'uid e non il nome utente.

6. Stampa le statistiche

Il comando netstat può anche stampare statistiche di rete come il numero totale di pacchetti ricevuti e trasmessi per tipo di protocollo e così via.

Per elencare le statistiche di tutti i tipi di pacchetti

$ netstat -s
Ip:
    32797 total packets received
    0 forwarded
    0 incoming packets discarded
    32795 incoming packets delivered
    29115 requests sent out
    60 outgoing packets dropped
Icmp:
    125 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 125
    125 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 125
... OUTPUT TRUNCATED ...

Per stampare le statistiche solo di protocolli selezionati come TCP o UDP, utilizzare le opzioni corrispondenti come t e u insieme all'opzione s. Semplice!

7. Visualizza le informazioni sull'instradamento del kernel

Le informazioni di instradamento del kernel possono essere stampate con l'opzione r. È lo stesso output fornito dal comando route. Usiamo anche l'opzione n per disabilitare la ricerca del nome host.

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

8. Stampa interfacce di rete

Il comando netstat può anche stampare le informazioni sulle interfacce di rete. L'opzione "-i" esegue il compito.

$ netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0     31611      0      0 0         27503      0      0      0 BMRU
lo        65536 0      2913      0      0 0          2913      0      0      0 LRU

L'output di cui sopra contiene informazioni in un formato molto grezzo. Per ottenere una versione più umana dell'output, utilizzare l'opzione e insieme a i.

$ netstat -ie
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:16:36:f8:b2:64
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::216:36ff:fef8:b264/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:31682 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27573 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:29637117 (29.6 MB)  TX bytes:4590583 (4.5 MB)
          Interrupt:18 Memory:da000000-da020000
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2921 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2921 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:305297 (305.2 KB)  TX bytes:305297 (305.2 KB)

L'output sopra è simile all'output mostrato dal comando ifconfig.

9. Ottieni continuamente l'output di netstat

Netstat può emettere continuamente informazioni sulla connessione con l'opzione c.

$ netstat -ct

Il comando precedente produrrà continuamente connessioni TCP.

10. Visualizza le informazioni sul gruppo multicast

L'opzione g visualizzerà le informazioni sul gruppo multicast per i protocolli IPv4 e IPv6.

$ netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      224.0.0.251
eth0            1      all-systems.mcast.net
lo              1      ip6-allnodes
lo              1      ff01::1
eth0            1      ff02::fb
eth0            1      ff02::1:fff8:b264
eth0            1      ip6-allnodes
eth0            1      ff01::1
wlan0           1      ip6-allnodes
wlan0           1      ff01::1

Altri esempi di comando netstat

Ok, abbiamo trattato gli esempi di base del comando netstat sopra. Ora è il momento di fare delle cose geek con stile.

Stampa connessioni attive

Le connessioni delle prese attive sono nello stato "ESTABLISHED". Quindi, per ottenere tutte le connessioni attive correnti, usa netstat con grep come segue

$ netstat -atnp | grep ESTA
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.1.2:49156       173.255.230.5:80        ESTABLISHED 1691/chrome
tcp        0      0 192.168.1.2:33324       173.194.36.117:443      ESTABLISHED 1691/chrome

Per guardare un elenco continuo di connessioni attive, usa il comando watch insieme a netstat e grep

$ watch -d -n0 "netstat -atnp | grep ESTA"

Verifica se un servizio è in esecuzione

Se vuoi controllare se un server come http,smtp o ntp è in esecuzione o meno, usa di nuovo grep.

$ sudo netstat -aple | grep ntp
udp        0      0 enlightened.local:ntp   *:*                                 root       17430       1789/ntpd
udp        0      0 localhost:ntp           *:*                                 root       17429       1789/ntpd
udp        0      0 *:ntp                   *:*                                 root       17422       1789/ntpd
udp6       0      0 fe80::216:36ff:fef8:ntp [::]:*                              root       17432       1789/ntpd
udp6       0      0 ip6-localhost:ntp       [::]:*                              root       17431       1789/ntpd
udp6       0      0 [::]:ntp                [::]:*                              root       17423       1789/ntpd
unix  2      [ ]         DGRAM                    17418    1789/ntpd

Quindi abbiamo scoperto che il server ntp è in esecuzione. Grep per http o smtp o qualunque cosa tu stia cercando.

Conclusione

Bene, questa era la maggior parte di ciò per cui viene utilizzato netstat. Se stai cercando informazioni più avanzate o vuoi approfondire, leggi il manuale di netstat (man netstat).

E lascia il tuo feedback e i tuoi suggerimenti nella casella dei commenti qui sotto.

Risorse

Dai un'occhiata alla pagina del manuale di linux per netstat per saperne di più.

https://linux.die.net/man/8/netstat
https://man7.org/linux/man-pages/man8/netstat.8.html


Linux
  1. 8 Esempi di comandi TR Linux

  2. Esempi di comandi "ls" di base in Linux

  3. Esempi di comandi "chmod" di base in Linux

  4. Esempi di comandi rm in Linux

  5. ps Esempi di comandi in Linux

Comando wc Linux con esempi

Comando Netstat in Linux - 28 comandi con esempi

10 esempi di comando Linux ss per monitorare le connessioni di rete

Esempi di comandi id in Linux

Esempi di comandi df in Linux

du Esempi di comandi in Linux