ss - statistika socketů
V předchozím tutoriálu jsme viděli, jak použít příkaz netstat k získání podrobností o síťových/soketových připojeních. Příkaz netstat je však již dlouho zastaralý a nahrazen příkazem ss ze sady nástrojů iproute.
Příkaz ss je schopen zobrazit podrobnosti o síťových připojeních s více informacemi než příkaz netstat a je rychlejší. Příkaz netstat čte různé soubory /proc, aby shromáždil informace. Tento přístup je však pomalejší, pokud existuje mnoho připojení k zobrazení.
Příkaz ss získává informace přímo z prostoru jádra. Možnosti používané s příkazy ss jsou velmi podobné příkazu netstat, což umožňuje snadnou náhradu.
V tomto tutoriálu se tedy podíváme na několik příkladů, jak používat příkaz ss ke kontrole síťových připojení a statistik soketů.
1. Vypsat všechna připojení
Nejjednodušší příkaz je vypsat všechna připojení.
$ ss | méněNetid State Recv-Q Send-Q Local Address:Port Peer Address:Portu_str ESTAB 0 0 * 15545 * 15544u_str ESTAB 0 0 * 12240 * 12241u_str ESTAB 0 0 @/tmp/dbus-2hQdRv1712AB99592 1252 EST 0str. ESTAB 0 0 * 15204 * 15205.....
Výstup nasměrujeme na méně, aby byl výstup rolovatelný. Výstup bude obsahovat všechny podrobnosti o připojení tcp, udp a unix socket.
2. Odfiltrujte připojení tcp, udp nebo unix
Chcete-li zobrazit pouze připojení tcp nebo udp nebo unix, použijte volbu t, u nebo x.
$ ss -tState Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 192.168.1.2:43839 108.160.162.37:httpESTAB 0 0 192.168.1.2:43622 190.15 ESTAB92.01908.1 :33141 83.170.73.249:ircdESTAB 0 0 192.168.1.2:54028 74.125.135.125:xmpp-client
$ ss -tOR$ ss -A tcp
Ve výchozím nastavení bude samotná volba „t“ hlásit pouze ta připojení, která jsou „navázaná“ nebo PŘIPOJENÁ. Nehlásí tcp sokety, které „NASLOUCHAJÍ“. K nahlášení použijte volbu „-a“ spolu s t všechny najednou.
Vypsat všechna připojení udp
$ ss -uaState Recv-Q Send-Q Local Address:Port Peer Address:PortUNCONN 0 0 192.168.1.2:48268 *:*UNCONN 0 0 192.168.1.2:56575 *:*UNCONN 0 0 *:40309 *UNCONN 0 0 192.168.1.2:56879 *:*UNCONN 0 0 *:49014 *:*UNCONN 0 0 192.168.1.2:53124 *:*UNCONN 0 0 127.0.1.1:pre>doména *:*
$ ss -a -A udp
Volba a říká ss, aby hlásil jak "CONNECTED" tak "LISTENING" sockety. Protože UDP je protokol bez připojení, pouhé "ss -u" ve většině případů nic nehlásí. Proto používáme možnost "a" hlásit všechna připojení UDP (připojená a naslouchající).
Podobně použijte volbu x k vypsání všech unixových soketových připojení.
3. Nepřekládat název hostitele
Chcete-li získat výstup rychleji, použijte volbu "n", abyste zabránili ss v překladu IP adres na názvy hostitelů. To však také zabrání rozlišení čísel portů.
$ ss -ntState Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 192.168.1.2:43839 108.160.162.37:80ESTAB 0 0 192.168.1.2:514250 74.0.0.8 :33141 83.170.73.249:6667ESTAB 0 0 192.168.1.2:54028 74.125.135.125:5222ESTAB 0 0 192.168.1.2:48156 66.021.0.0.4. Zobrazit pouze naslouchající zásuvky
Tím se zobrazí seznam všech naslouchacích zásuvek. Například webový server apache otevře soketové připojení na portu 80, aby naslouchal příchozím připojením.
$ ss -ltnState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 5 127.0.1.1:53 *:*LISTEN 0 128 127.0.0.1:631 *:*LISTEN 0 128 ::1:631 :::*Výše uvedený příkaz vypíše všechna připojení "naslouchání" "tcp". Volba n deaktivuje rozlišení názvů hostitelů IP adres, takže výstup je rychlejší.
Chcete-li vypsat všechna naslouchající připojení udp, nahraďte t za u
$ ss -lunState Recv-Q Send-Q Local Address:Port Peer Address:PortUNCONN 0 0 127.0.1.1:53 *:*UNCONN 0 0 *:68 *:*UNCONN 0 0 192.168.1.2:123 *:*UNCONN 0 0 127.0.0.1:123 *:*UNCONN 0 0 *:123 *:*UNCONN 0 0 *:5353 *:*UNCONN 0 0 *:47799 *:*UNCONN 0 0 *:25322 *:*UNCONN 0 0 :::54310 :::*.....5. Vytisknout název procesu a pid
Chcete-li vytisknout název procesu/pid, který vlastní připojení, použijte volbu p
$ ss -ltpState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 100 127.0.0.1:smtp *:*LISTEN 0 128 127.0.0.1:9050 *:*LISTEN 0 128 *:90 *:*POSLECH 0 128 *:db-lsp *:* users:(("dropbox",3566,32))POSLECH 0 5 127.0.0.1:6600 *:*POSLECH 0 128 127.0.0.1:9000 *:* uživatelé:( ("php5-fpm",1620,0),("php5-fpm",1619,0))Ve výše uvedeném výstupu obsahuje poslední sloupec název procesu a pid. V tomto příkladu je dnsmasq název procesu a 1299 je pid.
$ sudo ss -ltp[sudo] heslo pro osvícené:State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 100 127.0.0.1:smtp *:* users:(("master",2051, 12))LISTEN 0 128 *:90 *:* users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx", 1697,6),("nginx",1696,6))POSLECH 0 5 127.0.0.1:6600 *:* uživatelé:(("mpd",2392,5))POSLECH 0 128 127.0.0.1:9000 *:* users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))POSLECHNOUT 0 16 *:2633 *:* uživatelé:(("oned",1853,16))LISTEN 0 50 127.0.0.1:mysql *:* users:(("mysqld",1095,10))POSLECHNOUT 0 5 127.0.1.1:domain *:* users:(( "dnsmasq",1347,5))POSLECHNOUT 0 32 *:ftp *:* users:(("vsftpd",1051,3))POSLECHNOUT 0 128 *:ssh *:* users:(("sshd",1015,3))POSLECHNOUT 0 128 127.0.0.1:ipp *:* uživatelé :(("cupsd",688,11))POSLECHNOUT 0 128 :::http :::* users:(("apache2",5322,4),("apache2",5321,4),("apache2" ,5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))POSLECHNOUT 0 128 :::ssh :::* uživatelé:( ("sshd",1015,4))POSLECHNOUT 0 128 ::1:ipp :::* users:(("cupsd",688,10))6. Tisk souhrnných statistik
Volba s vytiskne statistiku.
$ ss -sTotal:526 (kernel 0)TCP:10 (estab 7, uzavřeno 0, osiřelé 0, synrecv 0, timewait 0/0), porty 0Transport Total IPv6* 0 - -RAW 0 0 0UDP 15 9 6TCP 10 9 1INET 25 18 7FRAG 0 0 07. Zobrazit informace o časovači
S volbou '-o' by se zobrazila časová informace každého připojení. Informace časovače říká, jak dlouho pomocí
$ ss -tn -oState Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 192.168.1.2:43839 108.160.162.37:80ESTAB 0 0 192.168.1.2:326140. keepalive,26sec,0)ESTAB 0 0 192.168.1.2:33141 83.170.73.249:6667ESTAB 0 0 192.168.1.2:58857 74.121.141.84:80 čas. Časovač 40,239:80:(keepalive,32s,0)8. Zobrazit pouze připojení soketu IPv4 nebo IPv6
Chcete-li zobrazit pouze připojení soketu IPv4, použijte volbu „-f inet“ nebo „-4“.
$ ss -tl -f inetState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 100 127.0.0.1:smtp *:*LISTEN 0 128 127.0.0.1:9050 *:*LISTEN 0 128 *:90 *:*POSLECH 0 128 *:db-lsp *:*POSLECH 0 5 127.0.0.1:6600 *:*Chcete-li zobrazit pouze připojení IPv6, použijte volbu „-f inet6“ nebo „-6“.
$ ss -tl6State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 100 ::1:smtp :::*LISTEN 0 128 :::12865 :::*LISTEN 0 128 :::http :::*POSLECH 0 128 :::ssh :::*POSLECH 0 128 ::1:ipp :::*9. Filtrování připojení podle stavu tcp
Příkaz ss podporuje filtry, které lze použít k zobrazení pouze určitých připojení. Výraz filtru by měl mít příponu za všemi možnostmi. Příkaz ss přijímá filtr v následujícím formátu.
$ ss [ MOŽNOSTI ] [ STAV-FILTR ] [ FILTR ADRESY ]Zde je několik příkladů, jak filtrovat připojení soketů podle stavů soketů.
Pro zobrazení všech tcp soketů Ipv4, které jsou ve stavu "připojeno".$ ss -t4 stav zřízenRecv-Q Odeslat-Q Místní adresa:Port Peer Adresa:Port0 0 192.168.1.2:54436 165.193.246.23:https0 0 192.168.1.2:43386 173.16252. :38355 199.59.150.46:https0 0 192.168.1.2:56198 108.160.162.37:httpZobrazovací zásuvky se stavovým time-wait
$ ss -t4 state time-waitRecv-Q Send-Q Local Address:Port Peer Address:Port0 0 192.168.1.2:42261 199.59.150.39:https0 0 127.0.0.1:43541 127:2633.1>preStav může být jeden z následujících
1. založeno2. syn-sent3. syn-recv4. fin-čekej-15. fin-čekej-26. čas čekání 7. zavřeno8. zavřít-čekat9. poslední akce 10. uzavření 11. vše - Všechny výše uvedené stavy12. připojeno - Všechny stavy kromě naslouchání a zavřeno13. synchronized - Všechny připojené stavy kromě syn-sent14. bucket - Zobrazit stavy, které jsou udržovány jako minizásuvky, tj. time-wait a syn-recv.15. velký – Opačný stav kbelíku.Všimněte si, že mnoho stavů jako syn-sent, syn-recv by většinu času nezobrazovalo žádné sokety, protože sokety zůstávají v takových stavech velmi krátkou dobu. Ideální by bylo použít k detekci takových stavů soketu v reálném čase příkaz watch.
Zde je příklad
$ watch -n 1 "ss -t4 state syn-sent"Po spuštění výše uvedeného příkazu zkuste otevřít nějaký web v prohlížeči nebo si něco stáhnout z nějaké adresy URL. Okamžitě byste měli vidět připojení zásuvek na výstupu, ale na velmi krátkou chvíli.
Každou 1.0s:ss -t4 state syn-sent Út 1. dubna 10:07:33 2014Recv-Q Send-Q Local Address:Port Peer Address:Port0 1 192.168.1.2:55089 202.79.210.121:861.0 1.2:33733 203.84.220.80:https0 1 192.168.1.2:36240 106.10.198.33:https10. Filtrujte připojení podle adresy a čísla portu
Kromě stavů soketu tcp podporuje příkaz ss také filtrování na základě adresy a čísla portu soketu. Následující příklady to ukazují.
Zobrazit všechna připojení soketu se zdrojovým nebo cílovým portem ssh.
$ ss -at '( dport =:ssh nebo sport =:ssh )'State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 128 *:ssh *:*LISTEN 0 128 :::ssh :::*Sokety s cílovým portem 443 nebo 80
$ ss -nt '( dst :443 nebo dst :80 )'State Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 192.168.1.2:58844 199.59.148.82:443ESTAB 981.0 0.0 :55320 165.193.246.23:443estab 0 0 192.168.1.2:56198 108.160.162.37:80estab 0 0 192.168.1.2:54889 02043030.15.1303030.15.13030. 38.127.167.38:443Následující syntaxe by také fungovala
$ ss -nt dst :443 nebo dst :80Další příklady
# Filtrovat podle adresy$ ss -nt dst 74.125.236.178# Podporován je také zápis CIDR$ ss -nt dst 74.125.236.178/16# Kombinace adresy a portu$ ss -nt dst 74.125.236.178:80Porty lze také filtrovat pomocí možností dport/sport. Čísla portů musí mít předponu „:“.
$ ss -nt dport =:80State Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 192.168.1.2:56198 108.160.162.37:80ESTAB 0 0 192.168.233.55.0958 0 192.168.1.2:55043 74.125.236.178:80Výše uvedené je stejné jako> ss -nt dst :80
Několik dalších příkladů filtrování
# zdrojová adresa je 127.0.0.1 a zdrojový port je větší než 5000$ ss -nt src 127.0.0.1 sport gt :5000# místní smtp (port 25) zásuvky$ sudo ss -ntlp sport eq :smtp# čísla portů větší než 25 $ sudo ss -nt sport gt :1024# zásuvky se vzdálenými porty méně než 100 $ sudo ss -nt dport \<:100# připojení ke vzdálenému portu 80$ sudo ss -nt stav připojený dport =:80Při porovnávání čísel portů jsou podporováni následující operátoři
<=or le :Menší nebo rovno portu>=nebo ge :Větší nebo rovno portu==nebo eq :Rovná se portu!=or ne :Nerovná se portunebo lt :Větší než na port Shrnutí
Výše uvedené příklady pokrývají většinu toho, co příkaz ss podporuje. Pro více informací navštivte manuálové stránky.
Dokumentaci syntaxe filtru lze nalézt v balíčku iproute2-doc, který lze nainstalovat na systémy debian/ubuntu
$ sudo apt-get install iproute2-docSoubor /usr/share/doc/iproute2-doc/ss.html obsahuje podrobnosti o syntaxi filtru příkazu ss.
10 příkazů pro kontrolu diskových oddílů a místa na disku v systému Linux 10 základních příkladů příkazu Netstat pro LinuxLinux