Πώς να χρησιμοποιήσετε την εντολή ss στο Linux

Η εντολή ss είναι μια σύγχρονη αντικατάσταση του κλασικού netstat. Μπορείτε να το χρησιμοποιήσετε στο Linux για να λάβετε στατιστικά στοιχεία σχετικά με τις συνδέσεις δικτύου σας. Δείτε πώς να εργαστείτε με αυτό το εύχρηστο εργαλείο.

Το ss Command έναντι του netstat

Αντικατάσταση του καταργημένου εντολή netstat, σσ σας δίνει αναλυτικές πληροφορίες σχετικά με τον τρόπο επικοινωνίας του υπολογιστή σας με άλλους υπολογιστές, δίκτυα και υπηρεσίες.

ss εμφανίζει στατιστικά στοιχεία για Πρωτόκολλο Ελέγχου Μετάδοσης (TCP), Πρωτόκολλο User Datagram (UDP), Unix (διαδικασία), και ακατέργαστες πρίζες. Ακατέργαστες πρίζες λειτουργούν στο επίπεδο OSI δικτύου, που σημαίνει ότι οι κεφαλίδες TCP και UDP πρέπει να αντιμετωπίζονται από το λογισμικό εφαρμογής και όχι από το επίπεδο μεταφοράς. Πρωτόκολλο μηνυμάτων ελέγχου Διαδικτύου (ICMP) μηνύματα και το ping utility και οι δύο χρησιμοποιούν ακατέργαστες πρίζες.

Χρησιμοποιώντας ss

Δεν χρειάζεται να εγκαταστήσετε το ss, καθώς αποτελεί ήδη μέρος μιας ενημερωμένης διανομής Linux. Η παραγωγή του, ωστόσο, μπορεί να είναι πολύ μεγάλη—είχαμε αποτελέσματα που περιέχουν περισσότερες από 630 γραμμές. Τα αποτελέσματα είναι επίσης πολύ μεγάλα.

Εξαιτίας αυτού, συμπεριλάβαμε αναπαραστάσεις κειμένου των αποτελεσμάτων που λάβαμε, καθώς δεν χωρούσαν σε ένα στιγμιότυπο οθόνης. Τα περικόψαμε για να τα κάνουμε πιο διαχειρίσιμα.

Καταχώριση συνδέσεων δικτύου

Η χρήση ss χωρίς επιλογές γραμμής εντολών εμφανίζει υποδοχές που δεν ακούνε. Δηλαδή, παραθέτει τις υποδοχές που δεν βρίσκονται σε κατάσταση ακρόασης.

Για να το δείτε, πληκτρολογήστε τα εξής:

ss

Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

Οι στήλες είναι οι εξής:

Netid: Ο τύπος πρίζας. Στο παράδειγμά μας, έχουμε “u_str”, μια ροή Unix, μια “udp” και “icmp6”, μια υποδοχή ICMP έκδοσης IP 6. Μπορείτε να βρείτε περισσότερες περιγραφές για Τύποι υποδοχών Linux στις σελίδες man Linux.
Κατάσταση: Η κατάσταση στην οποία βρίσκεται η πρίζα.
Recv-Q: Ο αριθμός των ληφθέντων πακέτων.
Send-Q: Ο αριθμός των σταλθέντων πακέτων.
Local Address:Port: Η τοπική διεύθυνση και θύρα (ή ισοδύναμες τιμές για υποδοχές Unix).
Peer Address:Port: Η απομακρυσμένη διεύθυνση και η θύρα (ή ισοδύναμες τιμές για υποδοχές Unix).

  Last Light Redux σε Linux

Για υποδοχές UDP, η στήλη “Κατάσταση” είναι συνήθως κενή. Για υποδοχές TCP μπορεί να είναι ένα από τα ακόλουθα:

ΑΚΡΟΑΣΗ: Μόνο από την πλευρά του διακομιστή. Η πρίζα περιμένει αίτημα σύνδεσης.
SYN-SENT: Μόνο από την πλευρά του πελάτη. Αυτή η υποδοχή έχει υποβάλει αίτημα σύνδεσης και περιμένει να δει αν έχει γίνει αποδεκτό.
SYN-RECEIVED: Μόνο από την πλευρά του διακομιστή. Αυτή η πρίζα περιμένει για επιβεβαίωση σύνδεσης μετά την αποδοχή ενός αιτήματος σύνδεσης.
ΙΔΡΥΘΗΚΕ: Διακομιστής και πελάτες. Έχει δημιουργηθεί μια λειτουργική σύνδεση μεταξύ του διακομιστή και του πελάτη, επιτρέποντας τη μεταφορά δεδομένων μεταξύ των δύο.
FIN-WAIT-1: Διακομιστής και πελάτες. Αυτή η πρίζα αναμένει ένα αίτημα τερματισμού σύνδεσης από την απομακρυσμένη πρίζα ή μια επιβεβαίωση ενός αιτήματος τερματισμού σύνδεσης που είχε σταλεί προηγουμένως από αυτήν την υποδοχή.
FIN-WAIT-2: Διακομιστής και πελάτες. Αυτή η πρίζα αναμένει αίτημα τερματισμού σύνδεσης από την απομακρυσμένη πρίζα.
ΚΛΕΙΣΙΜΟ ΑΝΑΜΟΝΗ: Διακομιστής και πελάτης. Αυτή η υποδοχή αναμένει αίτημα τερματισμού σύνδεσης από τον τοπικό χρήστη.
ΚΛΕΙΣΙΜΟ: Διακομιστής και πελάτες. Αυτή η πρίζα αναμένει επιβεβαίωση αιτήματος τερματισμού σύνδεσης από την απομακρυσμένη πρίζα.
ΤΕΛΕΥΤΑΙΑ ΕΠΙΔΕΙΞΗ: Διακομιστής και πελάτης. Αυτή η πρίζα περιμένει μια επιβεβαίωση του αιτήματος τερματισμού σύνδεσης που έστειλε στην απομακρυσμένη πρίζα.
ΧΡΟΝΟΣ ΑΝΑΜΟΝΗΣ: Διακομιστής και πελάτες. Αυτή η υποδοχή έστειλε μια επιβεβαίωση στην απομακρυσμένη υποδοχή για να την ενημερώσει ότι έλαβε το αίτημα τερματισμού της απομακρυσμένης πρίζας. Τώρα περιμένει να βεβαιωθεί ότι ελήφθη η επιβεβαίωση.
ΚΛΕΙΣΤΟ: Δεν υπάρχει σύνδεση, επομένως η πρίζα έχει τερματιστεί.

Εισαγωγή Υποδοχές Ακρόασης

Για να δούμε τις υποδοχές ακρόασης, θα προσθέσουμε την επιλογή -l (ακρόαση), όπως:

ss -l

Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process 
nl    UNCONN 0      0                             rtnl:NetworkManager/535                * 
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              * 
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0 
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0 
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0 
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0 
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0 
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

Όλες αυτές οι πρίζες δεν είναι συνδεδεμένες και ακούνε. Το “rtnl” σημαίνει σύνδεση δικτύου δρομολόγησης, η οποία χρησιμοποιείται για τη μεταφορά πληροφοριών μεταξύ των διεργασιών του πυρήνα και του χώρου χρήστη.

  18 Καλύτεροι διακομιστές Syslog για Windows και Linux/Unix

Καταχώριση όλων των πριζών

Για να απαριθμήσετε όλες τις υποδοχές, μπορείτε να χρησιμοποιήσετε την επιλογή -a (όλα):

ss -a

Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process 
nl    UNCONN 0      0                  rtnl:NetworkManager/535               * 
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 * 
...
u_str LISTEN 0      100       public/showq 23222                            * 0 
u_str LISTEN 0      100      private/error 23225                            * 0 
u_str LISTEN 0      100      private/retry 23228                            * 0 
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:* 
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:* 
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:* 
tcp   LISTEN 0      5               [::1]:ipp                            [::]:* 
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

Η έξοδος περιέχει όλες τις υποδοχές, ανεξαρτήτως κατάστασης.

Καταχώρηση υποδοχών TCP

Μπορείτε επίσης να εφαρμόσετε ένα φίλτρο, ώστε να εμφανίζονται μόνο οι αντίστοιχες υποδοχές. Θα χρησιμοποιήσουμε την επιλογή -t (TCP), επομένως θα εμφανίζονται μόνο οι υποδοχές TCP:

σσ -α -τ

Καταχώριση υποδοχών UDP

Η επιλογή -u (UDP) εκτελεί τον ίδιο τύπο δράσης φιλτραρίσματος. Αυτή τη φορά, θα δούμε μόνο υποδοχές UDP:

ss -a -u

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:60734       0.0.0.0:* 
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:* 
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 
UNCONN 0      0                   [::]:mdns          [::]:* 
UNCONN 0      0                   [::]:51193         [::]:*

Καταχώρηση υποδοχών Unix

Για να δείτε μόνο υποδοχές Unix, μπορείτε να συμπεριλάβετε την επιλογή -x (Unix), όπως φαίνεται παρακάτω:

ss -a -x

Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process 
u_str ESTAB 0      0                                * 41826            * 41827 
u_str ESTAB 0      0                                * 23183            * 23184 
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639 
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885 
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

Καταχώριση Raw Sockets

Το φίλτρο για ακατέργαστες πρίζες είναι η επιλογή -w (raw):

ss -a -w

Καταχώρηση Υποδοχές IP Έκδοσης 4

Οι υποδοχές που χρησιμοποιούν το πρωτόκολλο έκδοσης 4 TCP/IP μπορούν να παρατίθενται χρησιμοποιώντας την επιλογή -4 (IPV4):

ss -a -4

Καταχώριση IP Έκδοσης 6 Υποδοχές

Μπορείτε να ενεργοποιήσετε το αντίστοιχο φίλτρο IP έκδοσης 6 με την επιλογή -6 (IPV6), όπως:

ss -a -6

Καταχώρηση Sockets κατά κράτος

Μπορείτε να παραθέσετε τις υποδοχές ανά κατάσταση στην οποία βρίσκονται με την επιλογή κατάστασης. Αυτό λειτουργεί με καθιερωμένες καταστάσεις, ακρόαση ή κλειστές καταστάσεις. Θα χρησιμοποιήσουμε επίσης την επιλογή επίλυσης (-r), η οποία προσπαθεί να επιλύσει διευθύνσεις δικτύου σε ονόματα και θύρες σε πρωτόκολλα.

  Το Shadow of War στο Linux

Η ακόλουθη εντολή θα αναζητήσει εγκατεστημένες συνδέσεις TCP και το ss θα προσπαθήσει να επιλύσει τα ονόματα:

ss -t -r state established

Παρατίθενται τέσσερις συνδέσεις που βρίσκονται στην κανονική κατάσταση. Το όνομα κεντρικού υπολογιστή, ubuntu20-04, έχει επιλυθεί και εμφανίζεται το “ssh” αντί για το 22 για τη σύνδεση SSH στη δεύτερη γραμμή.

Μπορούμε να το επαναλάβουμε για να αναζητήσουμε υποδοχές σε κατάσταση ακρόασης:

ss -t -r state listening

Recv-Q Send-Q Local Address:Port   Peer Address:Port Process 
0      128        localhost:5939        0.0.0.0:* 
0      4096    localhost%lo:domain      0.0.0.0:* 
0      128          0.0.0.0:ssh         0.0.0.0:* 
0      5          localhost:ipp         0.0.0.0:* 
0      100        localhost:smtp        0.0.0.0:* 
0      128             [::]:ssh         [::]:* 
0      5      ip6-localhost:ipp         [::]:* 
0      100    ip6-localhost:smtp        [::]:*

Καταχώρηση Υποδοχών κατά Πρωτόκολλο

Μπορείτε να καταχωρήσετε τις υποδοχές χρησιμοποιώντας ένα συγκεκριμένο πρωτόκολλο με τις επιλογές dport και sport, οι οποίες αντιπροσωπεύουν τις θύρες προορισμού και πηγής, αντίστοιχα.

Πληκτρολογούμε τα ακόλουθα για να παραθέσουμε τις υποδοχές χρησιμοποιώντας το πρωτόκολλο HTTPS σε μια εγκατεστημένη σύνδεση (σημειώστε το διάστημα μετά την αρχική παρένθεση και πριν από το κλείσιμο):

ss -a state established ‘( dport = :https or sport = :https )’

Μπορούμε να χρησιμοποιήσουμε το όνομα του πρωτοκόλλου ή τη θύρα που συνήθως σχετίζεται με αυτό το πρωτόκολλο. Η προεπιλεγμένη θύρα για Ασφαλές κέλυφος (SSH) είναι η θύρα 22.

Θα χρησιμοποιήσουμε το όνομα του πρωτοκόλλου σε μία εντολή και, στη συνέχεια, θα το επαναλάβουμε χρησιμοποιώντας τον αριθμό θύρας:

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Όπως ήταν αναμενόμενο, έχουμε τα ίδια αποτελέσματα.

Καταχώριση συνδέσεων σε μια συγκεκριμένη διεύθυνση IP

Με την επιλογή dst (προορισμός), μπορούμε να παραθέσουμε συνδέσεις σε μια συγκεκριμένη διεύθυνση IP προορισμού.

Πληκτρολογούμε τα εξής:

ss -a dst 192.168.4.25

Προσδιορισμός Διαδικασιών

Για να δείτε ποιες διεργασίες χρησιμοποιούν τις υποδοχές, μπορείτε να χρησιμοποιήσετε την επιλογή διεργασιών (-p), όπως φαίνεται παρακάτω (σημειώστε ότι πρέπει να χρησιμοποιήσετε sudo):

sudo ss -t -p

State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process 
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151)) 
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

Αυτό μας δείχνει ότι οι δύο εγκατεστημένες συνδέσεις σε υποδοχές TCP χρησιμοποιούνται από τον δαίμονα SSH και τον Firefox.

Ένας Άξιος Διάδοχος

Η εντολή ss παρέχει τις ίδιες πληροφορίες που παρείχε προηγουμένως η netstat, αλλά με έναν απλούστερο και πιο προσιτό τρόπο. Μπορείτε να ελέγξετε το σελίδα ανθρώπου για περισσότερες επιλογές και συμβουλές.