Jak korzystać z polecenia ss w systemie Linux

Polecenie ss to nowoczesny zamiennik klasycznego netstata. Możesz go użyć w systemie Linux, aby uzyskać statystyki dotyczące połączeń sieciowych. Oto jak pracować z tym przydatnym narzędziem.

Polecenie ss kontra netstat

Zastąpienie wycofanego polecenie netstat, ss podaje szczegółowe informacje o tym, jak Twój komputer komunikuje się z innymi komputerami, sieciami i usługami.

ss wyświetla statystyki dla Protokół kontroli transmisji (TCP), Protokół datagramów użytkownika (UDP), Unix (międzyprocesowy)i surowe gniazda. Surowe gniazda działają w sieciowy poziom OSI, co oznacza, że ​​nagłówki TCP i UDP muszą być obsługiwane przez oprogramowanie, a nie przez warstwę transportową. Internet Control Message Protocol (ICMP) i świst narzędzie oba używają surowych gniazd.

Za pomocą ss

Nie musisz instalować ss, ponieważ jest to już część aktualnej dystrybucji Linuksa. Jednak wynik może być bardzo długi – otrzymaliśmy wyniki zawierające ponad 630 wierszy. Wyniki są również bardzo szerokie.

Z tego powodu dołączyliśmy tekstowe reprezentacje wyników, które uzyskaliśmy, ponieważ nie zmieściłyby się one na zrzucie ekranu. Przycięliśmy je, aby były łatwiejsze w zarządzaniu.

Lista połączeń sieciowych

Użycie ss bez opcji wiersza polecenia powoduje wyświetlenie gniazd, które nie nasłuchują. Oznacza to, że wyświetla listę gniazd, które nie są w stanie nasłuchiwania.

Aby to zobaczyć, wpisz:

ss

ss w oknie terminala

Wyjście ss w oknie terminala.

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

Kolumny są następujące:

Netid: typ gniazda. W naszym przykładzie mamy „u_str”, strumień uniksowy, „udp” i „icmp6”, gniazdo ICMP IP w wersji 6. Możesz znaleźć więcej opisów Typy gniazd Linuksa na stronach podręcznika Linux.
Stan: stan gniazda.
Recv-Q: liczba odebranych pakietów.
Send-Q: liczba wysłanych pakietów.
Adres lokalny: Port: Lokalny adres i port (lub równoważne wartości dla gniazd Unix).
Adres równorzędny: Port: zdalny adres i port (lub równoważne wartości dla gniazd Unix).

W przypadku gniazd UDP kolumna „Stan” jest zwykle pusta. W przypadku gniazd TCP może to być jedno z następujących:

LISTEN: tylko po stronie serwera. Gniazdo oczekuje na żądanie połączenia.
SYN-SENT: tylko po stronie klienta. To gniazdo wysłało żądanie połączenia i czeka, aby sprawdzić, czy zostało zaakceptowane.
SYN-RECEIVED: tylko po stronie serwera. To gniazdo czeka na potwierdzenie połączenia po zaakceptowaniu żądania połączenia.
USTANOWIONO: serwer i klienci. Pomiędzy serwerem a klientem zostało nawiązane działające połączenie, umożliwiające przesyłanie danych między nimi.
FIN-WAIT-1: serwer i klienci. To gniazdo oczekuje na żądanie zakończenia połączenia ze zdalnego gniazda lub na potwierdzenie żądania zakończenia połączenia, które zostało wcześniej wysłane z tego gniazda.
FIN-WAIT-2: serwer i klienci. To gniazdo oczekuje na żądanie zakończenia połączenia z gniazda zdalnego.
CLOSE-WAIT: serwer i klient. To gniazdo oczekuje na żądanie zakończenia połączenia od użytkownika lokalnego.
ZAMKNIĘCIE: serwer i klienci. To gniazdo oczekuje na potwierdzenie żądania zakończenia połączenia ze zdalnego gniazda.
LAST-ACK: serwer i klient. To gniazdo oczekuje na potwierdzenie żądania zakończenia połączenia, które zostało wysłane do zdalnego gniazda.
CZAS OCZEKIWANIA: serwer i klienci. To gniazdo wysłało potwierdzenie do zdalnego gniazda, aby poinformować, że otrzymało żądanie zakończenia zdalnego gniazda. Teraz czeka, aby upewnić się, że otrzymano potwierdzenie.
ZAMKNIĘTE: brak połączenia, więc gniazdo zostało zakończone.

Listing gniazd nasłuchowych

Aby zobaczyć gniazda nasłuchowe, dodamy opcję -l (nasłuchiwanie), na przykład:

ss -l

ss -l w oknie terminala.

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

Te gniazda są niepodłączone i nasłuchują. „Rtnl” oznacza routingowe łącze sieciowe, które jest używane do przesyłania informacji między procesami jądra i przestrzeni użytkownika.

Lista wszystkich gniazd

Aby wyświetlić wszystkie gniazda, możesz użyć opcji -a (wszystkie):

ss -a

ss -a w oknie terminala.

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                           [::]:*

Wyjście zawiera wszystkie gniazda, niezależnie od stanu.

Lista gniazd TCP

Możesz również zastosować filtr, aby wyświetlić tylko pasujące gniazda. Użyjemy opcji -t (TCP), więc wyszczególnione zostaną tylko gniazda TCP:

ss -a -t

 ss -a -t w oknie terminala.

Lista gniazd UDP

Opcja -u (UDP) wykonuje ten sam typ akcji filtrowania. Tym razem zobaczymy tylko gniazda UDP:

ss -a -u

ss -a -u w oknie terminala.

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         [::]:*

Listing Unix Sockets

Aby zobaczyć tylko gniazda Unix, możesz dołączyć opcję -x (Unix), jak pokazano poniżej:

ss -a -x

ss -a -x w oknie terminala.

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

Lista surowych gniazd

Filtrem dla surowych gniazd jest opcja -w (surowa):

ss -a -w

ss -a -w w oknie terminala.

Lista gniazd IP w wersji 4

Gniazda korzystające z protokołu TCP / IP w wersji 4 można wyświetlić za pomocą opcji -4 (IPV4):

ss -a -4

ss -a -4 w oknie terminala.

Lista gniazd IP w wersji 6

Możesz włączyć pasujący filtr IP w wersji 6 za pomocą opcji -6 (IPV6), na przykład:

ss -a -6

ss -a -6 w oknie terminala.

Lista gniazd według stanu

Możesz wyświetlić listę gniazd według stanu, w którym się znajdują, za pomocą opcji stanu. Działa to w stanach ustalonych, odsłuchowych lub zamkniętych. Użyjemy również opcji rozwiązywania (-r), która próbuje przekształcić adresy sieciowe na nazwy i porty na protokoły.

Następujące polecenie będzie szukać nawiązanych połączeń TCP, a ss spróbuje rozwiązać nazwy:

ss -t -r state established

ss -t -r stan ustanowiony w oknie terminala.

Wyświetlane są cztery połączenia, które są w stanie ustanowionym. Nazwa hosta ubuntu20-04 została rozwiązana i zamiast 22 dla połączenia SSH w drugiej linii jest wyświetlany symbol „ssh”.

Możemy to powtórzyć, szukając gniazd w stanie odsłuchu:

ss -t -r state listening

ss -t -r stan nasłuchiwania w oknie terminala.

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        [::]:*

Lista gniazd według protokołu

Możesz wyświetlić listę gniazd używających określonego protokołu z opcjami dport i sport, które reprezentują odpowiednio porty docelowe i źródłowe.

Wpisujemy następujące polecenie, aby wyświetlić gniazda korzystające z protokołu HTTPS na nawiązanym połączeniu (zwróć uwagę na spację po nawiasie otwierającym i przed nawiasem zamykającym):

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

ss -stanowiono '(dport =: https or sport =: https)' w oknie terminala.

Możemy użyć nazwy protokołu lub portu zwykle skojarzonego z tym protokołem. Domyślny port dla Secure Shell (SSH) to port 22.

Użyjemy nazwy protokołu w jednym poleceniu, a następnie powtórzymy ją, używając numeru portu:

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

ss -a '(dport =: ssh or sport =: ssh)' w oknie terminala.

Zgodnie z oczekiwaniami otrzymujemy te same wyniki.

Wyświetlanie listy połączeń z określonym adresem IP

Dzięki opcji dst (miejsce docelowe) możemy wyświetlić listę połączeń z określonym docelowym adresem IP.

Wpisujemy:

ss -a dst 192.168.4.25

ss -a dst 192.168.4.25 w oknie terminala.

Identyfikacja procesów

Aby zobaczyć, które procesy używają gniazd, możesz użyć opcji procesów (-p), jak pokazano poniżej (pamiętaj, że musisz użyć sudo):

sudo ss -t -p

sudo ss -t -p w oknie terminala.

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))

To pokazuje nam, że dwa nawiązane połączenia na gniazdach TCP są używane przez demona SSH i Firefoksa.

Godny następca

Polecenie ss dostarcza te same informacje, które wcześniej dostarczał netstat, ale w prostszy, bardziej przystępny sposób. Możesz sprawdzić strona podręcznika aby uzyskać więcej opcji i wskazówek.