Una porta è un endpoint di comunicazione. All’interno di un sistema operativo, una porta viene aperta o chiusa per pacchetti di dati per processi o servizi di rete specifici.
In genere, le porte identificano un servizio di rete specifico assegnato a loro. Questo può essere modificato configurando manualmente il servizio per l’utilizzo di una porta diversa, ma in generale è possibile utilizzare le impostazioni predefinite.
Le prime 1024 porte (numeri di porta a ) sono indicate come numeri di porta noti e sono riservate ai servizi più comunemente utilizzati. Questi includono SSH (22), HTTP (80), HTTPS (443).
I numeri di porta superiori a 1024 sono indicati come porte effimere.
- I numeri di porta 1024 49151 sono chiamati porte registrate/utente. Sono assegnate da IANA (Internet Assigned Numbers Authority) su richiesta e approvazione di un’organizzazione o di uno sviluppatore di applicazioni. Queste porte sono usate dai protocolli di trasporto (TCP, UDP, DCCP, SCTP) per identificare un’applicazione o un servizio specifico. Queste porte dovrebbero essere trattate come semi-riservate.
- I numeri di porta 49152 65535 sono chiamati porte dinamiche/private o effimere. Queste porte non sono assegnate, controllate o registrate da nessuna autorità. Sono usate per porte temporanee o private. Sono anche note come porte non riservate. Queste porte sono usate dai client e dai server per stabilire connessioni a breve termine. Queste porte possono essere cambiate dal sistema operativo o dall’applicazione in base alle necessità.
I comandi Netstat e SS sono utilizzati per darci informazioni sullo stato di queste porte e sui servizi che le utilizzano. Passiamo ora dopo questa introduzione al loro approfondimento.
Netstat, è un comando composto dalle parole network (“rete”) e statistics (“statistiche”), è un programma che funziona tramite istruzioni date dalla riga di comando. Fornisce statistiche essenziali su tutte le attività di rete e dà informazioni su quali porte e indirizzi funzionino le rispettive connessioni – TCP, UDP – oltre a indicare quali siano le porte aperte per accogliere le richieste.
SS è un’utilità utilizzata per studiare i socket nei sistemi Linux e Unix. Mostra informazioni simili a netstat e in grado di scaricare le statistiche del socket. Il comando ss può visualizzare più di TCP e informazioni sullo stato rispetto ad altri strumenti. Per impostazione predefinita, ss visualizza un elenco di socket aperti non in ascolto (ad esempio TCP/UNIX/UDP) che hanno stabilito una connessione.
Comando Netstat
Il programma netstat fu implementato per la prima volta nel 1983 su BSD (Berkeley Software Distribution), sistema derivato di UNIX, di cui all’epoca la versione 4.2 fu tra le prime a supportare la famiglia di protocolli Internet TCP/IP. Su Linux, sviluppato nel 1991, così come su Windows a partire dalla versione 3.11 (1993), netstat è stato integrato come standard. Le diverse implementazioni sono molto simili per quanto riguarda la loro funzionalità, mentre i parametri dei comandi netstat, così come il loro output, si differenziano leggermente a seconda dei sistemi.
Il comando netstat è uno strumento utile per monitorare le connessioni sulla tua rete. Puoi usare diverse opzioni per visualizzare diverse informazioni sulle connessioni, le porte, le statistiche e molto altro.
Oltre ai socket collegati, può anche elencare i socket in ascolto che sono in attesa di connessioni in entrata. Quindi, verificando una porta aperta 80 è possibile 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 questa guida vediamo alcuni esempi di utilizzo del comando netstat per vedere informazioni sulle connessioni di rete e aprire le porte su un sistema.
Vediamo ora qualche suo utilizzo interessante:
$ netstat -a
bitnami@zpxwpress:~$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:webmin 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:domain 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:6010 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2203 0.0.0.0:* LISTEN tcp 0 0 provisioner-local:2203 zpxr72700X.fritz.:14354 ESTABLISHED tcp 0 0 provisioner-local:2203 zpxr72700X.fritz.:14358 ESTABLISHED tcp6 0 0 [::]:5355 [::]:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN tcp6 0 0 localhost:6010 [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN tcp6 0 0 [::]:2203 [::]:* LISTEN udp 0 0 0.0.0.0:631 0.0.0.0:* udp 0 0 0.0.0.0:mdns 0.0.0.0:* udp 0 0 0.0.0.0:5355 0.0.0.0:* udp 0 0 0.0.0.0:10000 0.0.0.0:* udp 0 0 127.0.0.53:domain 0.0.0.0:* udp 0 0 zpxwpress.fritz.:bootpc fritz.box:bootps ESTABLISHED udp 0 0 provisioner-loca:bootpc 0.0.0.0:* udp 0 0 0.0.0.0:39269 0.0.0.0:* udp6 0 0 zpxwpress:dhcpv6-client [::]:* udp6 0 0 zpxwpress:dhcpv6-client [::]:* udp6 0 0 [::]:51961 [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:5355 [::]:* raw6 0 0 [::]:ipv6-icmp [::]:* 7 raw6 0 0 [::]:ipv6-icmp [::]:* 7 Active UNIX domain sockets (servers and established)
Per visualizzare tutte le connessioni sia in ascolto che non in ascolto da diversi protocolli come socket tcp, udp e unix. Tuttavia questo non è interessante. Gli amministratori spesso desiderano scegliere connessioni specifiche in base a protocolli o numeri di porta, ad esempio.
Per visualizzare solo le connessioni TCP, usa:
$ netstat -at
bitnami@zpxwpress:~$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:webmin 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:domain 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:6010 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2203 0.0.0.0:* LISTEN tcp 0 72 provisioner-local:2203 zpxr72700X.fritz.:14354 ESTABLISHED tcp 0 0 provisioner-local:2203 zpxr72700X.fritz.:14358 ESTABLISHED tcp6 0 0 [::]:5355 [::]:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN tcp6 0 0 localhost:6010 [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN tcp6 0 0 [::]:2203 [::]:* LISTEN bitnami@zpxwpress:~$
Per visualizzare solo le connessioni UDP, usa:
$ netstat -au
bitnami@zpxwpress:~$ netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 0.0.0.0:631 0.0.0.0:* udp 0 0 0.0.0.0:mdns 0.0.0.0:* udp 0 0 0.0.0.0:5355 0.0.0.0:* udp 0 0 0.0.0.0:10000 0.0.0.0:* udp 0 0 127.0.0.53:domain 0.0.0.0:* udp 0 0 zpxwpress.fritz.:bootpc fritz.box:bootps ESTABLISHED udp 0 0 provisioner-loca:bootpc 0.0.0.0:* udp 0 0 0.0.0.0:39269 0.0.0.0:* udp6 0 0 zpxwpress:dhcpv6-client [::]:* udp6 0 0 zpxwpress:dhcpv6-client [::]:* udp6 0 0 [::]:51961 [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:5355 [::]:* bitnami@zpxwpress:~$
Per visualizzare solo le porte in ascolto, usa:
$ netstat -l
bitnami@zpxwpress:~$ netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:webmin 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:domain 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:6010 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2203 0.0.0.0:* LISTEN tcp6 0 0 [::]:5355 [::]:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN tcp6 0 0 localhost:6010 [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN tcp6 0 0 [::]:2203 [::]:* LISTEN udp 0 0 0.0.0.0:631 0.0.0.0:* udp 0 0 0.0.0.0:mdns 0.0.0.0:* udp 0 0 0.0.0.0:5355 0.0.0.0:* udp 0 0 0.0.0.0:10000 0.0.0.0:* udp 0 0 127.0.0.53:domain 0.0.0.0:* udp 0 0 provisioner-loca:bootpc 0.0.0.0:* udp 0 0 0.0.0.0:39269 0.0.0.0:* udp6 0 0 zpxwpress:dhcpv6-client [::]:* udp6 0 0 zpxwpress:dhcpv6-client [::]:* udp6 0 0 [::]:51961 [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:5355 [::]:* raw6 0 0 [::]:ipv6-icmp [::]:* 7 raw6 0 0 [::]:ipv6-icmp [::]:* 7 Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 11218 /run/systemd/journal/io.systemd.journal unix 2 [ ACC ] STREAM LISTENING 17091 /var/lib/syslog-ng/syslog-ng.ctl unix 2 [ ACC ] STREAM LISTENING 17672 /run/user/1000/systemd/private unix 2 [ ACC ] STREAM LISTENING 17679 /run/user/1000/bus unix 2 [ ACC ] STREAM LISTENING 17681 /run/user/1000/gnupg/S.dirmngr unix 2 [ ACC ] STREAM LISTENING 17683 /run/user/1000/gnupg/S.gpg-agent.browser unix 2 [ ACC ] STREAM LISTENING 17685 /run/user/1000/gnupg/S.gpg-agent.extra unix 2 [ ACC ] STREAM LISTENING 17687 /run/user/1000/gnupg/S.gpg-agent.ssh unix 2 [ ACC ] STREAM LISTENING 17689 /run/user/1000/gnupg/S.gpg-agent unix 2 [ ACC ] STREAM LISTENING 17691 /run/user/1000/pipewire-0 unix 2 [ ACC ] STREAM LISTENING 17693 /run/user/1000/pk-debconf-socket unix 2 [ ACC ] STREAM LISTENING 17695 /run/user/1000/pulse/native unix 2 [ ACC ] STREAM LISTENING 11945 /var/run/vmware/guestServicePipe unix 2 [ ACC ] STREAM LISTENING 11954 /run/systemd/resolve/io.systemd.Resolve unix 2 [ ACC ] STREAM LISTENING 18443 /var/run/gonit.sock unix 2 [ ACC ] STREAM LISTENING 18189 /opt/bitnami/php/var/run/www.sock unix 2 [ ACC ] STREAM LISTENING 18237 /opt/bitnami/mariadb/tmp/mysql.sock unix 2 [ ACC ] STREAM LISTENING 15014 /run/cups/cups.sock unix 2 [ ACC ] STREAM LISTENING 10049 /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 11610 /run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 10051 /run/systemd/userdb/io.systemd.DynamicUser unix 2 [ ACC ] STREAM LISTENING 10052 /run/systemd/io.system.ManagedOOM unix 2 [ ACC ] STREAM LISTENING 11616 /run/avahi-daemon/socket unix 2 [ ACC ] STREAM LISTENING 10063 /run/systemd/fsck.progress unix 2 [ ACC ] STREAM LISTENING 12729 /run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 10070 /run/systemd/journal/stdout unix 2 [ ACC ] SEQPACKET LISTENING 10073 /run/udev/control bitnami@zpxwpress:~$
Per visualizzare il nome del programma e l’ID del processo associati a ogni connessione, usa:
$ netstat -p
bitnami@zpxwpress:~$ netstat -p (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 136 provisioner-local:2203 zpxr72700X.fritz.:14354 ESTABLISHED - tcp 0 0 provisioner-local:2203 zpxr72700X.fritz.:14358 ESTABLISHED - udp 0 0 zpxwpress.fritz.:bootpc fritz.box:bootps ESTABLISHED - Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ] DGRAM 17669 1271/systemd /run/user/1000/systemd/notify unix 3 [ ] DGRAM 10046 - /run/systemd/notify unix 16 [ ] DGRAM 10066 - /run/systemd/journal/dev-log unix 8 [ ] DGRAM 10068 - /run/systemd/journal/socket unix 3 [ ] STREAM CONNECTED 17732 1271/systemd unix 3 [ ] STREAM CONNECTED 12835 - unix 3 [ ] STREAM CONNECTED 11313 - unix 3 [ ] STREAM CONNECTED 21635 - unix 2 [ ] DGRAM 17622 - unix 3 [ ] STREAM CONNECTED 13938 - /run/dbus/system_bus_socket unix 2 [ ] DGRAM 11222 - unix 3 [ ] STREAM CONNECTED 15030 - unix 3 [ ] STREAM CONNECTED 16769 - /run/systemd/journal/stdout
Per visualizzare le statistiche di tutti i protocolli, usa:
$ netstat -s
bitnami@zpxwpress:~$ netstat -s Ip: Forwarding: 2 21843 total packets received 3 with invalid addresses 0 forwarded 0 incoming packets discarded 19354 incoming packets delivered 7061 requests sent out Icmp: 0 ICMP messages received 0 input ICMP message failed ICMP input histogram: 0 ICMP messages sent 0 ICMP messages failed ICMP output histogram: Tcp: 9 active connection openings 7 passive connection openings 2 failed connection attempts 0 connection resets received 2 connections established 11615 segments received 9758 segments sent out 6 segments retransmitted 0 bad segments received 10 resets sent Udp: 10569 packets received 0 packets to unknown port received 0 packet receive errors 130 packets sent 0 receive buffer errors 0 send buffer errors UdpLite: TcpExt: 1 invalid SYN cookies received 4 TCP sockets finished time wait in fast timer 159 delayed acks sent 1 delayed acks further delayed because of locked socket Quick ack mode was activated 2963 times 4093 packet headers predicted 1512 acknowledgments not containing data payload received 4541 predicted acknowledgments TCPBacklogCoalesce: 332 TCPDSACKOldSent: 2963 TCPDSACKRecv: 12 1 connections reset due to unexpected data TCPRcvCoalesce: 15 TCPAutoCorking: 19 TCPSynRetrans: 6 TCPOrigDataSent: 5864 TCPDelivered: 5875 TCPDSACKRecvSegs: 6 TCPDSACKIgnoredDubious: 6 IpExt: InMcastPkts: 10573 OutMcastPkts: 79 InBcastPkts: 2426 InOctets: 3511081 OutOctets: 554438 InMcastOctets: 2575015 OutMcastOctets: 10135 InBcastOctets: 185172 InNoECTPkts: 21843
Per visualizzare la tabella di routing IP del kernel, usa:
$ netstat -r
bitnami@zpxwpress:~$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default fritz.box 0.0.0.0 UG 0 0 0 ens160
default fritz.box 0.0.0.0 UG 0 0 0 ens160
192.168.188.0 0.0.0.0 255.255.255.0 U 0 0 0 ens160
192.168.188.0 0.0.0.0 255.255.255.0 U 0 0 0 ens160
fritz.box 0.0.0.0 255.255.255.255 UH 0 0 0 ens160
Per ottenere una versione più strutturata dell’output utilizzare l’opzione e insieme a i.
bitnami@zpxwpress:~$ netstat -ei Kernel Interface table ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.188.46 netmask 255.255.255.0 broadcast 192.168.188.255 inet6 fd00::20c:29ff:fe41:9a8b prefixlen 64 scopeid 0x0<global> inet6 fe80::20c:29ff:fe41:9a8b prefixlen 64 scopeid 0x20<link> inet6 fd00::8f72:19d3:4358:3147 prefixlen 64 scopeid 0x0<global> ether 00:0c:29:41:9a:8b txqueuelen 1000 (Ethernet) RX packets 37404 bytes 6261850 (5.9 MiB) RX errors 0 dropped 6402 overruns 0 frame 0 TX packets 7496 bytes 695560 (679.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 2861 bytes 252860 (246.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2861 bytes 252860 (246.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 bitnami@zpxwpress:~$ netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 224.0.0.251 lo 1 all-systems.mcast.net ens160 1 224.0.0.252 ens160 1 224.0.0.251 ens160 1 all-systems.mcast.net lo 1 ff02::fb lo 1 ip6-allnodes lo 1 ff01::1 ens160 1 ff02::fb ens160 1 ff02::1:ff58:3147 ens160 1 ff02::1:3 ens160 2 ff02::1:ff41:9a8b ens160 2 ip6-allnodes ens160 1 ff01::1
Comando SS
Il comando ss è in grado di mostrare i dettagli sulle connessioni di rete con più informazioni rispetto al comando netstat ed è più veloce. Il comando netstat legge vari file /proc per raccogliere informazioni. Tuttavia, questo approccio è più lento quando ci sono molte connessioni da visualizzare.
Il comando ss ottiene le sue informazioni direttamente dallo spazio del kernel. Le opzioni utilizzate con i comandi ss sono molto simili a netstat rendendolo una facile sostituzione.
Quindi in questo tutorial vedremo alcuni esempi di come utilizzare il comando ss per controllare le connessioni di rete e le statistiche del socket.
Il comando più semplice è quello di elencare tutte le connessioni.
$ ss | less
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 * 17732 * 16809
u_str ESTAB 0 0 * 12835 * 12836
u_str ESTAB 0 0 * 11313 * 12539
u_str ESTAB 0 0 * 21635 * 21634
u_str ESTAB 0 0 /run/dbus/system_bus_socket 13938 * 13937
u_str ESTAB 0 0 * 15030 * 13811
u_str ESTAB 0 0 /run/systemd/journal/stdout 16769 * 17714
u_str ESTAB 0 0 * 21634 * 21635
u_str ESTAB 0 0 * 17674 * 17675
u_str ESTAB 0 0 * 17729 * 16808
u_str ESTAB 0 0 * 12843 * 11723
u_str ESTAB 0 0 * 17613 * 16740
u_str ESTAB 0 0 /run/systemd/journal/stdout 12930 * 12929
u_str ESTAB 0 0 /run/systemd/journal/stdout 16929 * 17832
u_str ESTAB 0 0 * 12836 * 12835
u_str ESTAB 0 0 * 21560 * 21559
u_str ESTAB 0 0 * 15060 * 0
u_str ESTAB 0 0 /run/user/1000/bus 16809 * 17732
u_str ESTAB 0 0 * 12804 * 11722
u_str ESTAB 0 0 /run/dbus/system_bus_socket 17675 * 17674
Per visualizzare solo le connessioni tcp o udp o unix utilizzare l’opzione t, u o x.
$ ss -t
bitnami@zpxwpress:~$ ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 36 192.168.188.74:2203 192.168.188.175:14354
ESTAB 0 0 192.168.188.74:2203 192.168.188.175:14358
bitnami@zpxwpress:~$
Per impostazione predefinita, l’opzione “t” da sola riporterà solo le connessioni “stabilite” o CONNESSE”. Non segnala i socket tcp che sono “LISTENING”. Usa l’opzione ‘-a’ insieme a t, per segnalarli tutti in una volta.
Elenca tutte le connessioni udp:
$ ss -ua
bitnami@zpxwpress:~$ ss -ua
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:631 0.0.0.0:*
UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:*
UNCONN 0 0 0.0.0.0:5355 0.0.0.0:*
UNCONN 0 0 0.0.0.0:10000 0.0.0.0:*
UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:*
ESTAB 0 0 192.168.188.46%ens160:bootpc 192.168.188.1:bootps
UNCONN 0 0 192.168.188.74%ens160:bootpc 0.0.0.0:*
UNCONN 0 0 0.0.0.0:39269 0.0.0.0:*
UNCONN 0 0 [fe80::20c:29ff:fe41:9a8b]%ens160:dhcpv6-client [::]:*
UNCONN 0 0 [fe80::20c:29ff:fe41:9a8b]%ens160:dhcpv6-client [::]:*
UNCONN 0 0 [::]:51961 [::]:*
UNCONN 0 0 [::]:mdns [::]:*
UNCONN 0 0 [::]:5355 [::]:*
Per ottenere l’output più velocemente, utilizzare l’opzione “n” per impedire a ss di risolvere gli indirizzi IP in nomi host. Ma questo impedirà anche la risoluzione dei numeri di porta.
$ ss - nt
bitnami@zpxwpress:~$ ss -nt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 36 192.168.188.74:2203 192.168.188.175:14354 ESTAB 0 0 192.168.188.74:2203 192.168.188.175:14358
Questo comando elencherà tutti i socket di ascolto. Ad esempio, il server Web Apache apre una connessione socket sulla porta 80 per ascoltare le connessioni in entrata.
$ ss -ltn
bitnami@zpxwpress:~$ ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* LISTEN 0 4096 0.0.0.0:10000 0.0.0.0:* LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 127.0.0.1:631 0.0.0.0:* LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* LISTEN 0 128 0.0.0.0:2203 0.0.0.0:* LISTEN 0 4096 [::]:5355 [::]:* LISTEN 0 511 *:80 *:* LISTEN 0 128 [::1]:631 [::]:* LISTEN 0 128 [::1]:6010 [::]:* LISTEN 0 511 *:443 *:* LISTEN 0 128 [::]:2203 [::]:* bitnami@zpxwpress:~$
Per visualizzare solo le connessioni socket IPv4 utilizzare l’opzione ‘-f inet’ o ‘-4’.
$ ss -tl -f inet
bitnami@zpxwpress:~$ ss -tl -f inet State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 80 127.0.0.1:mysql 0.0.0.0:* LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* LISTEN 0 4096 0.0.0.0:webmin 0.0.0.0:* LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:* LISTEN 0 128 127.0.0.1:ipp 0.0.0.0:* LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* LISTEN 0 128 0.0.0.0:2203 0.0.0.0:*
Per visualizzare solo le connessioni IPv6 utilizzare l’opzione ‘-f inet6’ o ‘-6’.
$ ss -tl6
bitnami@zpxwpress:~$ ss -tl6 State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 4096 [::]:5355 [::]:* LISTEN 0 511 *:http *:* LISTEN 0 128 [::1]:ipp [::]:* LISTEN 0 128 [::1]:6010 [::]:* LISTEN 0 511 *:https *:* LISTEN 0 128 [::]:2203 [::]:*
Il comando ss supporta filtri che possono essere utilizzati per visualizzare solo connessioni specifiche. L’espressione del filtro deve avere il suffisso dopo tutte le opzioni. Il comando ss accetta il filtro nel seguente formato.
$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]
Ora ecco alcuni esempi di come filtrare le connessioni socket in base agli stati del socket.
Per visualizzare tutti i socket TCP IPv4 che si trovano nello stato “connesso”.
bitnami@zpxwpress:~$ ss -t4 state established Recv-Q Send-Q Local Address:Port Peer Address:Port Process 0 36 192.168.188.74:2203 192.168.188.175:14354 0 0 192.168.188.74:2203 192.168.188.175:14358
I possibili stati sono:
1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all – All of the above states
12. connected – All the states except for listen and closed
13. synchronized – All the connected states except for syn-sent
14. bucket – Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
15. big – Opposite to bucket state.
Da notare che molti stati come syn-sent, syn-recv non mostrerebbero alcun socket per la maggior parte del tempo, poiché i socket rimangono in tali stati per un tempo molto breve. Sarebbe ideale utilizzare il comando watch per rilevare tali stati di presa in tempo reale. Ecco un esempio:
$ watch -n 1 "ss -t4 state syn-sent"
Dopo aver eseguito il comando precedente, prova ad aprire alcuni siti Web in un browser o scarica qualcosa da un URL. Immediatamente dovresti vedere le connessioni socket apparire nell’output, ma per un breve periodo.
Every 1.0s: ss -t4 state syn-sent Tue Apr 1 10:07:33 2014 Recv-Q Send-Q Local Address:Port Peer Address:Port 0 1 192.168.1.2:55089 202.79.210.121:https 0 1 192.168.1.2:33733 203.84.220.80:https 0 1 192.168.1.2:36240 106.10.198.33:https
Oltre agli stati del socket tcp, il comando ss supporta anche il filtraggio in base all’indirizzo e al numero di porta del socket. Gli esempi seguenti lo dimostrano.
Visualizza tutte le connessioni socket con porta di origine o di destinazione di ssh(2204).
$ ss -at '( dport = :2204 or sport = :2204 )'
zipixel@zpxc321:~$ ss -at '( dport = :2204 or sport = :2204 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:2204 0.0.0.0:* ESTAB 0 48 192.168.188.35:2204 192.168.188.175:13756 ESTAB 0 0 192.168.188.35:2204 192.168.188.175:13792 LISTEN 0 128 [::]:2204 [::]:*
Socket con porta di destinazione 443 o 80
$ ss -nt '( dst :443 or dst :80 )'
# Filter by address $ ss -nt dst 74.125.236.178 # CIDR notation is also supported $ ss -nt dst 74.125.236.178/16 # Address and Port combined $ ss -nt dst 74.125.236.178:80
Le porte possono anche essere filtrate con opzioni dport / sport. I numeri di porta devono essere preceduti da un “:”.
$ ss -nt dport = :80
# source address is 127.0.0.1 and source port is greater than 5000 $ ss -nt src 127.0.0.1 sport gt :5000 # local smtp (port 25) sockets $ sudo ss -ntlp sport eq :smtp # port numbers greater than 25 $ sudo ss -nt sport gt :1024 # sockets with remote ports less than 100 $ sudo ss -nt dport \< :100 # connections to remote port 80 $ sudo ss -nt state connected dport = :80
Conclusione
Il comando netstat è un’utilità di rete disponibile sui sistemi operativi Unix e Windows che consente di visualizzare le connessioni di rete in corso, le porte in ascolto e le statistiche di rete.
Il comando ss (Socket Statistics) è un’alternativa più recente a netstat, disponibile sui sistemi operativi Linux e Unix-like. ss fornisce informazioni più dettagliate sullo stato delle connessioni di rete.
le principali differenze tra i comandi possono riassumersi:
- Output formattato: netstat mostra l’output formattato in una tabella, mentre ss utilizza un output meno formale, ma più dettagliato.
- Velocità: ss è notevolmente più veloce di
netstat
in quanto è stato progettato per essere più efficiente e utilizza meno risorse di sistema. - Mostrare tutti gli stati di connessione: ss mostra tutti gli stati di connessione, mentre
netstat
mostra solo alcune connessioni. - Disponibilità: netstat è disponibile sia su sistemi Unix-like che su Windows, mentre ss è disponibile solo su sistemi Unix-like.
- Funzionalità: ss fornisce una maggiore quantità di informazioni rispetto a netstat, ad esempio, è in grado di visualizzare i timer delle connessioni, i socket UNIX, le connessioni multicast, gli spazi dei nomi delle reti e altro ancora.
In sintesi, ss è un’alternativa più efficiente e dettagliata a netstat, ma non è disponibile su Windows. Se hai bisogno di informazioni più dettagliate sulle connessioni di rete su un sistema Unix-like, ti consiglio di utilizzare il comando ss
.