Jak korzystać z polecenia ss w systemie Linux

Opublikowany: 2022-01-29
Okno terminala w laptopie z systemem Linux.
Fatmawati Achmad Zaenuri/Shutterstock

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

Polecenie ss kontra netstat

Zamiennik przestarzałego polecenia netstat , ss , zapewnia szczegółowe informacje o tym, jak komputer komunikuje się z innymi komputerami, sieciami i usługami.

ss wyświetla statystyki dla protokołu kontroli transmisji (TCP), protokołu datagramów użytkownika (UDP), Unix (międzyprocesowy) i gniazd surowych. Gniazda surowe działają na poziomie sieciowego OSI, co oznacza, że ​​nagłówki TCP i UDP muszą być obsługiwane przez oprogramowanie aplikacji, a nie przez warstwę transportową. Komunikaty protokołu ICMP (Internet Control Message Protocol) i narzędzie ping używają gniazd surowych.

Korzystanie z ss

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

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

Wyświetlanie listy połączeń sieciowych

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

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

 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 są następujące:

  • Netid : typ gniazda. W naszym przykładzie mamy „u_str”, strumień Unix, „udp” i „icmp6”, gniazdo ICMP IP w wersji 6. Więcej opisów typów gniazd Linuksa można znaleźć na stronach podręcznika Linuksa.
  • Stan : stan, w którym 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 Unix).
  • Peer Address:Port : Zdalny adres i port (lub równoważne wartości dla gniazd Unix).
Reklama

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

  • SŁUCHAJ: tylko po stronie serwera. Gniazdo czeka na żądanie połączenia.
  • SYN-SENT: tylko po stronie klienta. To gniazdo wysłało żądanie połączenia i czeka na akceptację.
  • SYN-RECEIVED: Tylko po stronie serwera. To gniazdo czeka na potwierdzenie połączenia po zaakceptowaniu żądania połączenia.
  • USTANOWIONO: Serwer i klienci. Działające połączenie zostało ustanowione między serwerem a klientem, umożliwiając 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 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.
  • ZAMKNIJ-CZEKAJ: 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 wysłanego do gniazda zdalnego.
  • TIME-WAIT: Serwer i klienci. To gniazdo wysłało potwierdzenie do gniazda zdalnego, aby poinformować je, że odebrało żądanie zakończenia zdalnego gniazda. Teraz czeka, aby upewnić się, że potwierdzenie zostało odebrane.
  • ZAMKNIĘTE: Brak połączenia, więc gniazdo zostało zakończone.

Lista gniazd odsłuchowych

Aby zobaczyć gniazda nasłuchowe, dodamy opcję -l (nasłuchiwanie), tak 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 SŁUCHAJ 0 4096 /run/systemd/private 13349 * 0 
u_seq LISTEN 0 4096 /run/udev/control 13376 * 0 
u_str SŁUCHAJ 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 /uruchom/użytkownik/1000/systemd/notify 32303 * 0

Wszystkie te gniazda są niepodłączone i nasłuchują. „rtnl” oznacza routing netlink, który jest używany 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 

 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 SŁUCHAJ 0 100 public/showq 23222 * 0 
u_str SŁUCHAJ 0 100 prywatny/błąd 23225 * 0 
u_str SŁUCHAJ 0 100 prywatne/ponów próbę 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.

Wyświetlanie listy gniazd TCP

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

ss -a -t

Wyświetlanie listy gniazd UDP

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

 ss -a -u 

 Stan Recv-Q Send-Q Adres lokalny:Adres równorzędny portu:Proces portu 
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:domena 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 [::]:*

Wyświetlanie listy gniazd Unix

Aby zobaczyć tylko gniazda Unix, możesz 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

Wyświetlanie listy gniazd surowych

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

 ss -a -w 

Wyświetlanie listy 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 

Wyświetlanie listy 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 

Wyświetlanie listy gniazd według stanu

Możesz wyświetlić listę gniazd według stanu, w którym się znajdują, za pomocą opcji state . Działa to ze stanami ustalonymi, nasłuchiwania lub zamkniętymi. Użyjemy również opcji resolve ( -r ), która próbuje rozwiązać adresy sieciowe z nazwami, a porty z protokołami.

Reklama

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

 ss -t -r stan ustalony 

Wymienione 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 wyświetlany jest „ssh”.

Możemy to powtórzyć, aby wyszukać gniazda w stanie nasłuchiwania:

 ss -t -r stan nasłuchiwania 

 Recv-Q Send-Q Adres lokalny:Adres równorzędny portu:Proces portu 
0 128 Lokalny Gospodarz:5939 0.0.0.0:* 
0 4096 localhost%lo:domena 0.0.0.0:* 
0 128 0.0.0.0:ssh 0.0.0.0:* 
0 5 host lokalny: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 listy gniazd według protokołu

Możesz wyświetlić listę gniazd używających konkretnego protokołu za pomocą opcji dport i sport , które reprezentują odpowiednio port docelowy i port źródłowy.

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

 ss -ustanowiony stan '( dport = :https lub sport = :https )' 

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

Reklama

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

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

Zgodnie z oczekiwaniami uzyskujemy 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 

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 

 Stan Recv-Q Send-Q Adres lokalny:Adres równorzędny portu:Proces portu 
ESTAB 0 0 192.168.4.28:57650 54.218.19.119:użytkownicy https:(("firefox",pid=3378,fd=151)) 
ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 użytkownicy:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

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

Godny następca

Polecenie ss udostępnia te same informacje, które wcześniej dostarczał netstat , ale w prostszy i bardziej przystępny sposób. Więcej opcji i wskazówek znajdziesz na stronie podręcznika.

POWIĄZANE: Najlepsze laptopy z systemem Linux dla programistów i entuzjastów