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