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
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
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
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
Lista gniazd UDP
Opcja -u (UDP) wykonuje ten sam typ akcji 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ż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
Lista surowych gniazd
Filtrem dla surowych gniazd jest opcja -w (surowa):
ss -a -w
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
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
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
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
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 )’
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 )’
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
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
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.