Příkaz ss
je moderní náhradou klasického příkazu netstat
. V systému Linux jej můžete použít k získání statistik o síťových připojeních. Zde se dozvíte, jak s tímto užitečným nástrojem pracovat.
Příkaz ss versus netstat
Příkaz ss
, který nahradil zastaralý příkaz netstat
, vám poskytne podrobné informace o tom, jak váš počítač komunikuje s ostatními počítači, sítěmi a službami.
ss
zobrazí statistiky pro protokol TCP (Transmission Control Protocol), UDP (User Datagram Protocol), unixové (meziprocesové) a surové sokety. Surové zásuvky pracují na síťové úrovni OSI, což znamená, že hlavičky protokolů TCP a UDP musí zpracovávat aplikační software, nikoli transportní vrstva. Zprávy protokolu ICMP (Internet Control Message Protocol) a nástroj ping používají raw sockety.
Použití ss
Nemusíte instalovat ss
, protože je již součástí aktuální distribuce Linuxu. Jeho výstup však může být velmi dlouhý – měli jsme výsledky obsahující více než 630 řádků. Výsledky jsou také velmi široké.
Z tohoto důvodu jsme přiložili textové reprezentace získaných výsledků, protože by se nevešly na snímek obrazovky. Ořezali jsme je, aby byly přehlednější.
Vypsání síťových připojení
Použití příkazu ss
bez voleb příkazového řádku vypíše zásuvky, které neposlouchají. To znamená, že vypíše zásuvky, které nejsou ve stavu naslouchání.
Chcete-li to vidět, zadejte následující příkaz:
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
Sloupce jsou následující:
- Netid: Typ zásuvky. V našem příkladu máme „u_str“, unixový stream, „udp“ a „icmp6“, zásuvku IP verze 6 ICMP. Další popisy typů linuxových soketů najdete v manuálových stránkách Linuxu.
- Stav:
- Recv-Q: Stav, ve kterém se zásuvka nachází:
- Send-Q: Počet přijatých paketů:
- Local Address:Port: Místní adresa a port (nebo ekvivalentní hodnoty pro unixové sockety).
- Peer Address:Port: Vzdálená adresa a port (nebo ekvivalentní hodnoty pro unixové sockety).
Pro UDP sockety je sloupec „State“ obvykle prázdný. Pro zásuvky TCP to může být jedna z následujících hodnot:
- LISTEN: Pouze na straně serveru. Zásuvka čeká na požadavek na připojení.
- SYN-SENT: Zásuvka čeká na požadavek na připojení: Pouze na straně klienta. Tento soket odeslal požadavek na připojení a čeká, zda bude přijat.
- SYN-RECEIVED: Pouze na straně serveru. Tento soket čeká na potvrzení spojení po přijetí požadavku na spojení.
- ESTABLISHED: Server a klienti. Mezi serverem a klientem bylo navázáno funkční spojení, které umožňuje přenos dat mezi nimi.
- FIN-WAIT-1: Server a klienti. Tento soket čeká na požadavek na ukončení spojení ze vzdáleného soketu nebo na potvrzení požadavku na ukončení spojení, který byl dříve odeslán z tohoto soketu.
- FIN-WAIT-2: Server a klienti. Tento soket čeká na požadavek na ukončení spojení ze vzdáleného soketu.
- CLOSE-WAIT: Server a klient. Tento soket čeká na požadavek na ukončení spojení od místního uživatele.
- CLOSING: Server a klienti. Tento soket čeká na potvrzení požadavku na ukončení spojení ze vzdáleného soketu.
- LAST-ACK: Server a klient. Tento soket čeká na potvrzení požadavku na ukončení spojení, který odeslal vzdálenému soketu.
- TIME-WAIT: Server a klienti. Tento soket odeslal potvrzení vzdálenému soketu, aby mu dal vědět, že obdržel požadavek vzdáleného soketu na ukončení spojení. Nyní čeká, aby se ujistil, že toto potvrzení bylo přijato.
- CLOSED:
Seznam naslouchajících soketů
Pro zobrazení naslouchajících soketů přidáme volbu -l
(naslouchající), například takto:
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 nepřipojené a naslouchají. „rtnl“ znamená routing netlink, který se používá k přenosu informací mezi procesy jádra a uživatelského prostoru.
Výpis všech soketů
Chcete-li vypsat všechny sokety, můžete použít 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 :ipp :* tcp LISTEN 0 100 :smtp :*
Výpis obsahuje všechny sokety bez ohledu na jejich stav.
Výpis zásuvek TCP
Můžete také použít filtr, takže se zobrazí pouze odpovídající zásuvky. Použijeme volbu -t
(TCP), takže budou vypsány pouze zásuvky TCP:
ss -a -t
Seznam zásuvek UDP
Stejný typ filtrační akce provádí volba -u
(UDP). Tentokrát uvidíme pouze zásuvky 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
Chcete-li zobrazit pouze zásuvky Unix, můžete zahrnout volbu -x
(Unix), jak je uvedeno níže:
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
Seznam nezpracovaných zásuvek
Filtrem pro nezpracované zásuvky je volba -w
(raw):
ss -a -w
Seznam zásuvek IP verze 4
Zásuvky používající protokol TCP/IP verze 4 lze vypsat pomocí volby -4
(IPV4):
ss -a -4
Seznam zásuvek s protokolem IP verze 6
Pomocí volby -6
(IPV6) můžete zapnout odpovídající filtr IP verze 6, například takto:
ss -a -6
Seznam zásuvek podle stavu
Zásuvky můžete zobrazit podle stavu, ve kterém se nacházejí, pomocí volby state
. To funguje se stavy established, listening nebo closed. Použijeme také volbu resolve (-r
), která se pokusí přeložit síťové adresy na jména a porty na protokoly.
Následující příkaz vyhledá navázaná spojení TCP a ss
se pokusí přeložit jména:
ss -t -r state established
V seznamu jsou uvedena čtyři spojení, která jsou ve stavu established. Jméno hostitele, ubuntu20-04, bylo vyřešeno a na druhém řádku je místo 22 pro připojení SSH zobrazeno „ssh“.
Tento postup můžeme zopakovat a vyhledat sokety 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 :*
Seznam soketů podle protokolu
Sokety používající konkrétní protokol můžete vypsat pomocí voleb dport
a sport
, které představují cílový, resp. zdrojový port.
Pro výpis soketů používajících protokol HTTPS na připojení established
zadáme následující příkaz (všimněte si mezery za úvodní a před uzavírací závorkou):
ss -a state established '( dport = :https or sport = :https )'
Můžeme použít název protokolu nebo port obvykle spojený s tímto protokolem. Výchozí port pro Secure Shell (SSH) je port 22.
V jednom příkazu použijeme název protokolu a pak jej zopakujeme s použitím čísla portu:
ss -a '( dport = :ssh or sport = :ssh )'
ss -a '( dport = :22 or sport = :22 )'
Podle očekávání dostaneme stejné výsledky.
Seznam spojení na konkrétní IP adresu
Pomocí možnosti dst
(destination) můžeme vypsat spojení na konkrétní cílovou IP adresu.
Zadáme následující příkaz:
ss -a dst 192.168.4.25
Identifikace procesů
Chceme-li zjistit, které procesy používají sokety, můžeme použít volbu processes (-p
), jak je uvedeno níže (všimněte si, že musíte použít 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))
Toto nám ukazuje, že dvě navázaná spojení na soketech TCP používají démon SSH a Firefox.
Důstojný nástupce
Příkaz ss
poskytuje stejné informace, které dříve poskytoval příkaz netstat
, ale jednodušším a přístupnějším způsobem. Další možnosti a tipy najdete na manuálové stránce.