Příkaz ss představuje moderní alternativu k tradičnímu nástroji netstat. V operačním systému Linux ho lze využít ke sledování statistik o síťových spojeních. Následující text vám ukáže, jak tento užitečný nástroj používat.
Příkaz ss: Nová generace oproti netstatu
ss přichází jako vylepšená náhrada za zastaralý příkaz netstat. Poskytuje detailní pohled na komunikaci vašeho počítače s ostatními zařízeními, sítěmi a službami. Umožňuje monitorovat statistiky pro Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unixové sokety (pro meziprocesovou komunikaci) a také tzv. „raw sockets“ (nezpracované sokety). Raw sockets pracují na síťové vrstvě OSI modelu, což znamená, že hlavičky TCP a UDP musí zpracovávat samotné aplikace, nikoli transportní vrstva. Zprávy Internet Control Message Protocol (ICMP) a nástroj ping využívají právě raw sokety.
Používání příkazu ss
ss je standardní součástí většiny současných distribucí Linuxu, takže není potřeba ho instalovat. Výstup příkazu však může být velmi obsáhlý, někdy i přes 600 řádků, a také poměrně široký.
Z tohoto důvodu jsme pro lepší čitelnost zahrnuli textové ukázky výstupu, jelikož by se celý výpis nevešel na jeden snímek obrazovky. Pro názornost jsme je upravili a zkrátili.
Zobrazení síťových spojení
Spuštění příkazu ss bez dalších parametrů vypíše sokety, které nejsou v režimu naslouchání. Jinými slovy, zobrazí se sokety, které nečekají na nové připojení.
Zadejte do terminálu:
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
Význam jednotlivých sloupců:
Netid: Typ soketu. V tomto příkladu se objevují „u_str“ (unixový stream), „udp“ a „icmp6“ (ICMP soket IP verze 6). Další informace o typech soketů v Linuxu lze nalézt v manuálových stránkách, například zde: Typy Linuxových soketů.
Stav: Aktuální stav soketu.
Recv-Q: Počet přijatých paketů.
Send-Q: Počet odeslaných paketů.
Local Address:Port: Lokální adresa a port (nebo odpovídající hodnoty pro Unixové sokety).
Peer Address:Port: Vzdálená adresa a port (nebo odpovídající hodnoty pro Unixové sokety).
U UDP soketů bývá sloupec „Stav“ obvykle prázdný. U TCP soketů se může objevit jeden z následujících stavů:
- LISTEN: Pouze na straně serveru. Soket čeká na příchozí požadavek na připojení.
- SYN-SENT: Pouze na straně klienta. Klient odeslal požadavek na připojení a čeká na jeho potvrzení.
- SYN-RECEIVED: Pouze na straně serveru. Server obdržel požadavek na připojení a nyní čeká na potvrzení.
- ESTABLISHED: Stav na serveru i klientu. Navázané funkční spojení, data mohou být přenášena oběma směry.
- FIN-WAIT-1: Server i klient. Soket čeká na požadavek na ukončení spojení z druhé strany, nebo na potvrzení ukončení, které odeslal sám.
- FIN-WAIT-2: Server i klient. Soket čeká na požadavek na ukončení spojení z druhé strany.
- CLOSE-WAIT: Server i klient. Soket čeká na požadavek na ukončení spojení od lokálního uživatele.
- CLOSING: Server i klient. Soket čeká na potvrzení požadavku na ukončení spojení z protější strany.
- LAST-ACK: Server i klient. Soket čeká na potvrzení ukončení spojení, které odeslal protější straně.
- TIME-WAIT: Server i klient. Soket odeslal potvrzení o přijetí ukončení spojení a čeká, aby se ujistil, že i druhá strana potvrzení obdržela.
- CLOSED: Spojení neexistuje, soket je ukončený.
Zobrazení naslouchajících soketů
Pro zobrazení naslouchajících soketů použijeme volbu -l
(listen):
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
Všechny tyto sokety jsou neaktivní a naslouchají na příchozí spojení. „rtnl“ značí routing netlink, který se používá pro přenos informací mezi jádrem a uživatelskými procesy.
Zobrazení všech soketů
Pro zobrazení všech soketů (bez ohledu na stav) použijte volbu -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 [::1]:ipp [::]:* tcp LISTEN 0 100 [::1]:smtp [::]:*
Tento výpis obsahuje všechny sokety, bez ohledu na jejich stav.
Zobrazení TCP soketů
Pro filtrování a zobrazení pouze TCP soketů použijeme volbu -t
(TCP):
ss -a -t
Zobrazení UDP soketů
Volba -u
(UDP) funguje obdobně, ale zobrazí pouze UDP sokety:
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 [::]:*
Zobrazení Unixových soketů
Pro zobrazení pouze Unixových soketů použijeme volbu -x
(Unix):
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
Zobrazení „Raw“ soketů
Filtr pro nezpracované sokety je volba -w
(raw):
ss -a -w
Zobrazení soketů IP verze 4
Sokety využívající protokol IPv4 lze zobrazit pomocí volby -4
(IPV4):
ss -a -4
Zobrazení soketů IP verze 6
Pro filtrování IPv6 soketů použijeme volbu -6
(IPV6):
ss -a -6
Filtrování soketů podle stavu
Pomocí volby `state` můžeme zobrazit sokety s konkrétním stavem (např. `established`, `listening`, `closed`). K tomu přidáme volbu `resolve (-r)`, která se pokusí překládat IP adresy na jména a porty na protokoly.
Následující příkaz vyhledá navázaná spojení (TCP) a pokusí se přeložit názvy:
ss -t -r state established
Výstup ukazuje čtyři spojení s navázaným stavem. Název hostitele „ubuntu20-04“ byl úspěšně přeložen a port 22 se zobrazuje jako „ssh“.
Stejný postup lze použít pro vyhledání soketů ve stavu naslouchání:
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 [::]:*
Filtrování soketů podle protokolu
Sokety lze filtrovat podle protokolu pomocí voleb `dport` (cílový port) a `sport` (zdrojový port).
Následující příkaz vypíše sokety používající HTTPS na navázaném spojení (všimněte si mezery za úvodní závorkou a před uzavírací závorkou):
ss -a state established ‘( dport = :https or sport = :https )’
Můžeme použít jak název protokolu, tak i číselný port. Výchozí port pro Secure Shell (SSH) je 22.
Následující příklad ukazuje použití názvu protokolu a poté i čísla portu:
ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’
Jak se očekávalo, výsledky jsou stejné.
Zobrazení spojení s konkrétní IP adresou
Volba `dst` (destination) umožňuje zobrazit spojení s určitou cílovou IP adresou.
Příklad:
ss -a dst 192.168.4.25
Zobrazení procesů
Pro zobrazení procesů, které používají jednotlivé sokety, je nutné použít volbu `processes (-p)` a příkaz `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))
Tento výpis ukazuje, že navázané TCP spojení jsou využívána procesy „sshd“ (démon SSH) a „firefox“ (webový prohlížeč).
Závěr
Příkaz `ss` je moderní a efektivní náhrada za zastaralý `netstat`. Poskytuje stejné informace, ale s lepší čitelností a přístupností. Další možnosti a tipy naleznete v manuálové stránce příkazu `ss`.