Jak korzystać z polecenia ss w systemie Linux

Polecenie ss jest nowoczesnym zamiennikiem klasycznego polecenia netstat. Można je wykorzystać w systemach Linux do uzyskania szczegółowych informacji na temat połączeń sieciowych. Poniżej przedstawiamy sposób korzystania z tego przydatnego narzędzia.

Polecenie ss w porównaniu do netstat

Polecenie ss, które zastępuje wycofane netstat, dostarcza szczegółowe dane dotyczące komunikacji komputera z innymi urządzeniami, sieciami i usługami.

Polecenie ss prezentuje statystyki dla Protokół kontroli transmisji (TCP), Protokół datagramów użytkownika (UDP), gniazd Unix oraz surowych gniazd. Surowe gniazda działają na poziomie sieciowym OSI, co oznacza, że nagłówki TCP i UDP są obsługiwane przez oprogramowanie, a nie przez warstwę transportową. Narzędzia takie jak Internet Control Message Protocol (ICMP) oraz ping również wykorzystują surowe gniazda.

Korzystanie z ss

Nie musisz instalować ss, ponieważ jest ono standardową częścią większości nowoczesnych dystrybucji Linuksa. Należy jednak pamiętać, że rezultaty mogą być obszerne – w niektórych przypadkach nawet ponad 630 wierszy. Dodatkowo, wyniki mogą być bardzo szerokie.

W związku z tym dołączyliśmy tekstowe wersje wyników, które uzyskaliśmy, ponieważ nie zmieściłyby się one na zrzutach ekranu. Zostały one skrócone, aby były łatwiejsze w analizie.

Lista połączeń sieciowych

Użycie polecenia ss bez dodatkowych opcji wyświetli gniazda, które nie nasłuchują, co oznacza, że pokaże listę gniazd, które nie są w trybie nasłuchiwania.

Aby to sprawdzić, wpisz:

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

Kolumny w wynikach przedstawiają:

Netid: Typ gniazda. W naszym przykładzie znajdują się „u_str” (strumień Unixowy), „udp” oraz „icmp6” (gniazdo ICMP dla IPv6). Pełne opisy można znaleźć w dokumentacji typów gniazd Linuksa.
Stan: Stan gniazda.
Recv-Q: Liczba odebranych pakietów.
Send-Q: Liczba wysłanych pakietów.
Adres lokalny:Port: Lokalny adres i port (lub odpowiednie wartości dla gniazd Unix).
Adres równorzędny:Port: Zdalny adres i port (lub odpowiednie wartości dla gniazd Unix).

Dla gniazd UDP kolumna „Stan” zazwyczaj pozostaje pusta. W przypadku gniazd TCP możliwe stany to:

  • LISTEN: Tylko po stronie serwera. Gniazdo oczekuje na połączenie.
  • SYN-SENT: Tylko po stronie klienta. Gniazdo wysłało prośbę o połączenie i czeka na odpowiedź.
  • SYN-RECEIVED: Tylko po stronie serwera. Gniazdo czeka na potwierdzenie połączenia po zaakceptowaniu prośby.
  • ESTABLISHED: Połączenie zostało nawiązane, umożliwiając przesyłanie danych.
  • FIN-WAIT-1: Gniazdo czeka na prośbę o zakończenie połączenia lub na potwierdzenie zakończenia, które zostało wcześniej wysłane.
  • FIN-WAIT-2: Gniazdo czeka na prośbę o zakończenie z gniazda zdalnego.
  • CLOSE-WAIT: Gniazdo czeka na prośbę o zakończenie połączenia od lokalnego użytkownika.
  • CLOSED: Gniazdo zostało zamknięte, brak aktywnego połączenia.
  • LAST-ACK: Gniazdo czeka na potwierdzenie zakończenia połączenia, które zostało wysłane do zdalnego gniazda.
  • TIME-WAIT: Gniazdo wysłało potwierdzenie do zdalnego gniazda i czeka na potwierdzenie tego potwierdzenia.

Lista gniazd nasłuchowych

Aby zobaczyć gniazda nasłuchowe, użyjemy opcji -l (nasłuchiwanie), na przykład:

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

Wyniki pokazują gniazda, które są w stanie nasłuchu. „Rtnl” odnosi się do routingu, które służy do przekazywania informacji między procesami jądra a przestrzenią użytkownika.

Wyświetlanie wszystkich gniazd

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

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

Wynik pokazuje wszystkie gniazda, bez względu na ich stan.

Lista gniazd TCP

Możesz również zastosować filtr, aby pokazać tylko gniazda TCP. Używając opcji -t (TCP), wyświetlisz jedynie gniazda TCP:

ss -a -t

Lista gniazd UDP

Możesz użyć opcji -u (UDP), aby zastosować podobny filtr. Tym razem wyświetlisz tylko gniazda 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         [::]:*

Lista gniazd Unix

Aby zobaczyć jedynie gniazda Unix, użyjemy opcji -x (Unix), jak pokazano poniżej:

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

Lista surowych gniazd

Aby wyświetlić surowe gniazda, należy użyć opcji -w (surowe):

ss -a -w

Lista gniazd IP w wersji 4

Aby wyświetlić gniazda korzystające z IPv4, użyj opcji -4 (IPV4):

ss -a -4

Lista gniazd IP w wersji 6

Możesz użyć opcji -6 (IPV6), aby zobaczyć gniazda IPv6:

ss -a -6

Lista gniazd według stanu

Aby wyświetlić gniazda według ich aktualnego stanu, możesz użyć opcji stanu. Możesz filtrować połączenia w stanach nawiązanych, nasłuchujących lub zamkniętych. Użyjemy również opcji rozwiązywania (-r), która stara się zamienić adresy sieciowe na nazwy oraz porty na protokoły.

Poniższe polecenie wyszuka nawiązane połączenia TCP, a ss spróbuje rozwiązać nazwy:

ss -t -r state established

Wyświetlane są cztery połączenia w stanie nawiązanym. Nazwa hosta ubuntu20-04 została rozwiązana, a zamiast numeru 22 dla połączenia SSH widnieje symbol „ssh” w drugiej linii.

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

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

Wyświetlanie gniazd według protokołu

Możesz wyświetlić gniazda korzystające z określonego protokołu, używając opcji dport i sport, które reprezentują porty docelowe i źródłowe.

Wpisz poniższe polecenie, aby zobaczyć 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 )’

Możesz używać zarówno nazw protokołów, jak i portów, które są z nimi zazwyczaj związane. Domyślny port dla Secure Shell (SSH) to 22.

Wykorzystamy nazwę protokołu w jednym poleceniu, a następnie powtórzymy, używając numeru portu:

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

Wyniki są zgodne z oczekiwaniami.

Wyświetlanie połączeń z konkretnym adresem IP

Dzięki opcji dst (adres docelowy) możesz wyświetlić listę połączeń z określonym adresem IP.

Wpisz:

ss -a dst 192.168.4.25

Identyfikacja procesów

Aby sprawdzić, które procesy używają gniazd, możesz skorzystać z opcji -p (procesy), jak pokazano poniżej (pamiętaj, aby użyć 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))

To pokazuje, że dwa aktywne połączenia na gniazdach TCP są używane przez demona SSH oraz przeglądarkę Firefox.

Godny następca

Polecenie ss oferuje te same informacje, które wcześniej dostarczało netstat, jednak w prostszy i bardziej przystępny sposób. Możesz sprawdzić stronę podręcznika w celu uzyskania dodatkowych opcji i wskazówek.


newsblog.pl