Okno terminala w systemie laptopa Linux.
Fatmawati Achmad Zaenuri/

Polecenie ss jest nowoczesnym zamiennikiem klasycznego netstat. Możesz go użyć w Linuksie, aby uzyskać statystyki dotyczące twoich połączeń sieciowych. Oto jak pracować z tym przydatnym narzędziem.

Komenda ss kontra netstat

Zastępując przestarzałe polecenie netstat, polecenie ss udostępnia szczegółowe informacje o tym, jak komputer komunikuje się z innymi komputerami, sieciami i usługami.

ss wyświetla statystyki dla protokołów TCP (Transmission Control Protocol), UDP (User Datagram Protocol), Unix (interprocess) i gniazd surowych. Gniazda surowe działają na sieciowym poziomie OSI, co oznacza, że nagłówki TCP i UDP muszą być obsługiwane przez oprogramowanie aplikacji, a nie przez warstwę transportową. Komunikaty Internet Control Message Protocol (ICMP) i narzędzie ping korzystają z gniazd surowych.

Używanie ss

Nie musisz instalować programu ss, ponieważ jest on już częścią aktualnej dystrybucji Linuksa. Jego dane wyjściowe mogą być jednak bardzo długie – mieliśmy wyniki zawierające ponad 630 linii. Wyniki są również bardzo szerokie.

Z tego powodu załą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 bardziej poręczne.

Listowanie połączeń sieciowych

Użycie polecenia ss bez opcji wiersza poleceń powoduje wylistowanie gniazd, które nie nasłuchują. To znaczy, wyświetla listę gniazd, które nie są w stanie nasłuchiwania.

Aby to zobaczyć, wpisz następujące polecenia:

ss

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 * 41826 * 41827u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688u_str ESTAB 0 0 * 35550 * 35551...u_str ESTAB 0 0 * 38127 * 38128u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242u_str ESTAB 0 0 * 19039 * 19040u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306icmp6 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ń Unix, „udp,” i „icmp6,” gniazdo IP wersja 6 ICMP. Więcej opisów typów gniazd w systemie Linux można znaleźć na stronach podręcznika Linux man.
  • Stan: Stan, w jakim znajduje się gniazdo.
  • Recv-Q: Liczba odebranych pakietów.
  • Send-Q: Liczba wysłanych pakietów.
  • Local Address:Port: Lokalny adres i port (lub równoważne wartości dla gniazd unixowych).
  • Peer Address:Port: Zdalny adres i port (lub równoważne wartości dla gniazd unixowych).

Dla gniazd UDP kolumna „State” jest zwykle pusta. W przypadku gniazd TCP może to być jedna z następujących wartości:

  • LISTEN: Tylko po stronie serwera. Gniazdo oczekuje na żądanie połączenia.
  • SYN-SENT: Tylko po stronie klienta. To gniazdo wykonało żądanie połączenia i czeka na sprawdzenie, czy zostało ono zaakceptowane.
  • SYN-RECEIVED: Tylko po stronie serwera. To gniazdo oczekuje na potwierdzenie połączenia po zaakceptowaniu żądania połączenia.
  • ESTABLISHED: Serwer i klienci. Pomiędzy serwerem a klientem zostało ustanowione połączenie robocze, pozwalające na przesyłanie danych pomię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 ze zdalnego gniazda.
  • CLOSE-WAIT: Serwer i klient. To gniazdo oczekuje na żądanie zakończenia połączenia od lokalnego użytkownika.
  • CLOSING: Serwer i klienci. To gniazdo oczekuje na potwierdzenie żądania zakończenia połączenia od zdalnego gniazda.
  • LAST-ACK: Serwer i klient. To gniazdo oczekuje na potwierdzenie żądania zakończenia połączenia, które wysłało do zdalnego gniazda.
  • TIME-WAIT: Serwer i klienci. To gniazdo wysłało potwierdzenie do zdalnego gniazda, aby dać mu znać, że otrzymało żądanie zakończenia połączenia wysłane przez zdalne gniazdo. Teraz czeka, aby upewnić się, że to potwierdzenie zostało odebrane.
  • CLOSED: Nie ma połączenia, więc gniazdo zostało zakończone.

Listowanie gniazd nasłuchujących

Aby zobaczyć gniazda nasłuchujące, dodajemy opcję -l (listening), jak poniżej:

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

Wszystkie te gniazda są niepołączone i nasłuchują. Słowo „rtnl” oznacza routing netlink, który jest używany do przesyłania informacji między procesami jądra i przestrzeni użytkownika.

Listowanie wszystkich gniazd

Aby wylistować wszystkie gniazda, można użyć opcji -a (all):

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 :ipp :* tcp LISTEN 0 100 :smtp :*

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

Listowanie gniazd TCP

Możesz również zastosować filtr, aby wyświetlane były tylko pasujące gniazda. Użyjemy opcji -t (TCP), więc tylko gniazda TCP zostaną wyświetlone na liście:

ss -a -t

Listowanie gniazd UDP

Opcja -u (UDP) wykonuje ten sam typ filtrowania. Tym razem zobaczymy 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 :*

Listing Unix Sockets

Aby zobaczyć tylko gniazda Unix, można dołączyć opcję -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

Listing Raw Sockets

Filtrem dla surowych gniazdek jest opcja -w (raw):

ss -a -w

Listing IP Version 4 Sockets

Gniazda wykorzystujące protokół TCP/IP w wersji 4 można wylistować za pomocą opcji -4 (IPV4):

ss -a -4

Listing IP Version 6 Sockets

Pasujący filtr IP w wersji 6 można włączyć za pomocą opcji -6 (IPV6), tak jak w przypadku:

ss -a -6

Listing Sockets By State

Możesz wylistować gniazda według stanu, w jakim się znajdują, za pomocą opcji state. Działa to dla stanów ustanowionych, nasłuchujących lub zamkniętych. Użyjemy również opcji resolve (-r), która próbuje rozwiązać adresy sieciowe z nazwami, a porty z protokołami.

Następujące polecenie wyszuka ustanowione połączenia TCP, a ss spróbuje rozwiązać nazwy:

ss -t -r state established

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

Możemy powtórzyć tę czynność, aby wyszukać gniazda w stanie nasłuchiwania:

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

Listing Sockets By Protocol

Można wylistować gniazda używające określonego protokołu za pomocą opcji dport i sport, które reprezentują odpowiednio porty docelowy i źródłowy.

Wpisujemy następujące polecenie, aby wyświetlić listę gniazd korzystających z protokołu HTTPS w połączeniu established (zwróć uwagę na spację po nawiasie otwierającym i przed zamykającym):

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

Możemy użyć nazwy protokołu lub portu zwykle kojarzonego z tym protokołem. Domyślnym portem dla Secure Shell (SSH) jest port 22.

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

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

Jak można się spodziewać, otrzymamy te same wyniki.

Listowanie połączeń z określonym adresem IP

Dzięki opcji dst (miejsce docelowe) możemy wylistować połączenia z określonym docelowym adresem IP.

Wpisujemy następujące polecenie:

ss -a dst 192.168.4.25

Identyfikacja procesów

Aby zobaczyć, które procesy używają gniazd, można użyć opcji processes (-p), jak pokazano poniżej (należy 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 nam, że dwa nawiązane połączenia na gniazdach TCP są używane przez demona SSH i Firefoksa.

Wartościowy następca

Komenda ss dostarcza tych samych informacji, które wcześniej dostarczała netstat, ale w prostszy, bardziej przystępny sposób. Możesz sprawdzić stronę podręcznika man, aby uzyskać więcej opcji i wskazówek.

Articles

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.