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