Jak používat příkaz ss v systému Linux

Příkaz ss je moderní náhradou klasického netstatu. V systému Linux jej můžete použít k získání statistik o vašich síťových připojeních. Zde je návod, jak s tímto šikovným nástrojem pracovat.

Příkaz ss versus netstat

Náhrada za zastaralé příkaz netstat, ss vám poskytne podrobné informace o tom, jak váš počítač komunikuje s jinými počítači, sítěmi a službami.

ss zobrazuje statistiky pro protokol kontroly přenosu (TCP), Protokol uživatele Datagram (UDP), Unix (meziprocesový)a nezpracované zásuvky. Surové zásuvky působit na síťová úroveň OSI, což znamená, že hlavičky TCP a UDP musí zpracovávat aplikační software, nikoli transportní vrstva. Internet Control Message Protocol (ICMP) zprávy a ping utility oba používají raw sockety.

Pomocí ss

Ss nemusíte instalovat, protože je již součástí aktuální linuxové distribuce. Jeho výstup však může být velmi dlouhý – máme výsledky obsahující přes 630 řádků. Výsledky jsou také velmi široké.

Z tohoto důvodu jsme zahrnuli textové reprezentace výsledků, které jsme získali, protože by se nevešly na snímek obrazovky. Ořízli jsme je, aby byly lépe ovladatelné.

Výpis síťových připojení

Použití ss bez možností příkazového řádku uvádí sokety, které nenaslouchají. To znamená, že uvádí zásuvky, které nejsou ve stavu naslouchání.

Chcete-li to zobrazit, zadejte následující:

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

Sloupce jsou následující:

Netid: Typ zásuvky. V našem příkladu máme „u_str“, unixový stream, „udp“ a „icmp6“, soket ICMP IP verze 6. Můžete najít další popisy Typy linuxových socketů na manuálových stránkách Linuxu.
Stav: Stav, ve kterém se soket nachází.
Recv-Q: Počet přijatých paketů.
Send-Q: Počet odeslaných paketů.
Local Address:Port: Místní adresa a port (nebo ekvivalentní hodnoty pro Unixové sokety).
Peer Address:Port: Vzdálená adresa a port (nebo ekvivalentní hodnoty pro Unixové sokety).

U UDP socketů je sloupec „State“ obvykle prázdný. Pro TCP sokety to může být jeden z následujících:

LISTEN: Pouze na straně serveru. Soket čeká na žádost o připojení.
SYN-SENT: Pouze na straně klienta. Tento soket zadal požadavek na připojení a čeká, zda bude přijat.
SYN-RECEIVED: Pouze na straně serveru. Tento soket čeká na potvrzení připojení po přijetí požadavku na připojení.
ZALOŽENO: 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í připojení ze vzdáleného soketu nebo na potvrzení požadavku na ukončení připojení, který byl dříve odeslán z tohoto soketu.
FIN-WAIT-2: Server a klienti. Tento soket čeká na požadavek na ukončení připojení ze vzdáleného soketu.
CLOSE-WAIT: Server a klient. Tento soket čeká na požadavek na ukončení připojení od místního uživatele.
UZAVŘENÍ: Server a klienti. Tento soket čeká na potvrzení požadavku na ukončení připojení ze vzdáleného soketu.
LAST-ACK: Server a klient. Tento soket čeká na potvrzení požadavku na ukončení připojení, který odeslal vzdálenému soketu.
TIME-WAIT: Server a klienti. Tento soket odeslal potvrzení vzdálenému soketu, aby mu oznámil, že přijal požadavek na ukončení vzdáleného soketu. Nyní čeká, aby se ujistil, že bylo přijato potvrzení.
ZAVŘENO: Neexistuje žádné spojení, takže zásuvka byla ukončena.

Výpis poslechových zásuvek

Abychom viděli naslouchající sokety, přidáme volbu -l (naslouchání), 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 zásuvky jsou nezapojené a poslouchají. „rtnl“ znamená směrovací netlink, který se používá k přenosu informací mezi procesy jádra a uživatelského prostoru.

Výpis všech zásuvek

Chcete-li vypsat všechny sokety, můžete použít volbu -a (vše):

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                           [::]:*

Výstup obsahuje všechny zásuvky bez ohledu na stav.

Výpis TCP Sockets

Můžete také použít filtr, takže se zobrazí pouze odpovídající sokety. Použijeme volbu -t (TCP), takže budou uvedeny pouze sokety TCP:

ss -a -t

Výpis UDP Sockets

Volba -u (UDP) provádí stejný typ akce filtrování. 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         [::]:*

Výpis Unixových soketů

Chcete-li zobrazit pouze sokety Unix, můžete zahrnout volbu -x (Unix), jak je znázorněno 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

Výpis Raw Sockets

Filtr pro nezpracované zásuvky je volba -w (raw):

ss -a -w

Výpis soketů IP verze 4

Sokety používající protokol TCP/IP verze 4 lze vypsat pomocí volby -4 (IPV4):

ss -a -4

Výpis soketů IP verze 6

Můžete zapnout odpovídající filtr IP verze 6 s možností -6 (IPV6), takto:

ss -a -6

Výpis zásuvek podle státu

Pomocí možnosti stavu můžete vypsat zásuvky podle stavu, ve kterém se nacházejí. To funguje se zavedenými, naslouchajícími nebo uzavřenými stavy. Použijeme také volbu resolve (-r), která se pokouší přeložit síťové adresy na jména a porty na protokoly.

Následující příkaz vyhledá navázaná připojení TCP a ss se pokusí přeložit názvy:

ss -t -r state established

Jsou uvedena čtyři připojení, která jsou v zavedeném stavu. Název hostitele, ubuntu20-04, byl vyřešen a místo 22 se pro připojení SSH na druhém řádku zobrazuje „ssh“.

Můžeme to zopakovat a hledat zásuvky 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        [::]:*

Výpis soketů podle protokolu

Můžete vypsat zásuvky pomocí konkrétního protokolu s možnostmi dport a sport, které představují cílové a zdrojové porty.

Pro výpis soketů pomocí protokolu HTTPS na navázaném připojení zadáme následující (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 název protokolu nebo port obvykle spojený s tímto protokolem. Výchozí port pro Secure Shell (SSH) je port 22.

Použijeme název protokolu v jednom příkazu a poté jej zopakujeme s číslem portu:

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Jak se dalo očekávat, dostaneme stejné výsledky.

Výpis připojení ke konkrétní IP adrese

Pomocí volby dst (destination) můžeme vypsat spojení na konkrétní cílovou IP adresu.

Zadáme následující:

ss -a dst 192.168.4.25

Identifikace procesů

Chcete-li zjistit, které procesy používají sokety, můžete použít volbu procesů (-p), jak je uvedeno níže (pozor, 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))

To nám ukazuje, že dvě navázaná připojení na soketech TCP jsou používána démonem SSH a Firefoxem.

Hodný nástupce

Příkaz ss poskytuje stejné informace, které dříve poskytoval netstat, ale jednodušším a přístupnějším způsobem. Můžete se podívat na manuálová stránka pro další možnosti a tipy.