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:

  1. Output formattato: netstat mostra l’output formattato in una tabella, mentre ss utilizza un output meno formale, ma più dettagliato.
  2. Velocità: ss è notevolmente più veloce di netstat in quanto è stato progettato per essere più efficiente e utilizza meno risorse di sistema.
  3. Mostrare tutti gli stati di connessione: ss mostra tutti gli stati di connessione, mentre netstat mostra solo alcune connessioni.
  4. Disponibilità: netstat è disponibile sia su sistemi Unix-like che su Windows, mentre ss è disponibile solo su sistemi Unix-like.
  5. 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.

Banner per il consenso ai cookie di Real Cookie Banner