A ss
parancs a klasszikus netstat
modern helyettesítője. Linuxon használhatod, hogy statisztikákat kapj a hálózati kapcsolataidról. Íme, hogyan dolgozhatsz ezzel a praktikus eszközzel.
Az ss parancs a netstat ellen
Az elavult netstat
parancsot helyettesítő ss
részletes információkat ad arról, hogyan kommunikál a számítógéped más számítógépekkel, hálózatokkal és szolgáltatásokkal.
ss
a TCP (Transmission Control Protocol), UDP (User Datagram Protocol), Unix (interprocess) és nyers aljzatok statisztikáit jeleníti meg. A nyers aljzatok a hálózati OSI-szinten működnek, ami azt jelenti, hogy a TCP és UDP fejléceket az alkalmazásszoftvernek kell kezelnie, nem pedig a szállítási rétegnek. Az Internet Control Message Protocol (ICMP) üzenetek és a ping segédprogram is nyers aljzatokat használ.
A ss használata
Nem kell telepítenie a ss
-t, mivel az már része egy aktuális Linux disztribúciónak. A kimenete azonban nagyon hosszú lehet – volt már olyan eredményünk, amely több mint 630 sort tartalmazott. Az eredmények is nagyon szélesek.
Emiatt a kapott eredmények szöveges ábrázolásait mellékeltük, mivel nem férnének bele egy képernyőképbe. Megvágtuk őket, hogy kezelhetőbbek legyenek.
Hálózati kapcsolatok listázása
A ss
parancssori opciók nélküli használata a nem hallgató aljzatokat listázza. Vagyis azokat a foglalatokat listázza, amelyek nincsenek figyelő állapotban.
Ezek megtekintéséhez írja be a következőket:
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
Az oszlopok a következők:
- Netid: A foglalat típusa. Példánkban “u_str”, egy Unix stream, egy “udp” és “icmp6”, egy IP 6-os verziójú ICMP foglalat. A Linux socket típusok további leírását a Linux man oldalakon találja.
- Állapot: A foglalat állapota.
- Recv-Q: A fogadott csomagok száma.
- Send-Q: Az elküldött csomagok száma.
- Local Address:Port: A helyi cím és port (vagy ennek megfelelő értékek Unix aljzatok esetén).
- Peer Address:Port: A távoli cím és port (vagy ennek megfelelő értékek Unix aljzatok esetén).
UDP aljzatok esetén az “State” oszlop általában üres. TCP aljzatok esetében a következő értékek egyike lehet:
- LISTEN: Csak szerveroldali. A foglalat kapcsolati kérésre vár.
- SYN-SENT: Csak ügyféloldali. Ez a foglalat kapcsolati kérést küldött, és várja, hogy elfogadják-e.
- SYN-RECEIVED: Csak szerveroldali. Ez a foglalat egy kapcsolati kérés elfogadása után a kapcsolat visszaigazolására vár.
- ESTABLISHED: Szerver és kliensek. A kiszolgáló és az ügyfél között létrejött egy működő kapcsolat, amely lehetővé teszi az adatátvitelt a kettő között.
- FIN-WAIT-1: Kiszolgáló és ügyfelek. Ez a foglalat a távoli foglalattól kapcsolatmegszakítási kérelmet vár, vagy egy korábban erről a foglalatról küldött kapcsolatmegszakítási kérelem visszaigazolását.
- FIN-WAIT-2: Kiszolgáló és ügyfelek. Ez a foglalat a távoli foglalatból érkező kapcsolatmegszakítási kérésre vár.
- CLOSE-WAIT: Kiszolgáló és ügyfél. Ez a foglalat a helyi felhasználó kapcsolatmegszakítási kérésére vár.
- CLOSING: Kiszolgáló és kliensek. Ez a foglalat a távoli foglalattól várja a kapcsolat megszakítási kérés visszaigazolását.
- LAST-ACK: Kiszolgáló és ügyfél. Ez a foglalat a távoli foglalatnak küldött kapcsolatmegszakítási kérelem visszaigazolására vár.
- TIME-WAIT: Kiszolgáló és ügyfelek. Ez a foglalat visszaigazolást küldött a távoli foglalatnak, hogy tudassa vele, hogy megkapta a távoli foglalat kapcsolatmegszakítási kérését. Most arra vár, hogy megbizonyosodjon arról, hogy a visszaigazolás megérkezett.
- CLOSED: Nincs kapcsolat, így a foglalat megszűnt.
A figyelő aljzatok listázása
A figyelő aljzatok megtekintéséhez a -l
(listening) opciót adjuk hozzá, így:
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
Az összes aljzat nem kapcsolódik és figyel. Az “rtnl” a routing netlinket jelenti, amely a kernel és a felhasználói tér folyamatai közötti információátvitelre szolgál.
Az összes aljzat listázása
Az összes aljzat listázásához használhatjuk a -a
(all) opciót:
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 :*
A kimenet az összes aljzatot tartalmazza, függetlenül azok állapotától.
TCP aljzatok listázása
Szűrőt is alkalmazhat, így csak a megfelelő aljzatok jelennek meg. A -t
(TCP) opciót fogjuk használni, így csak a TCP aljzatok lesznek listázva:
ss -a -t
UDP aljzatok listázása
A -u
(UDP) opció ugyanilyen típusú szűrési műveletet hajt végre. Ezúttal csak az UDP aljzatokat fogjuk látni:
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
Hogy csak a Unix aljzatokat lássuk, a -x
(Unix) opciót is megadhatjuk, ahogy az alábbiakban látható:
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
Listing Raw Sockets
A nyers aljzatok szűrője a -w
(raw) opció:
ss -a -w
IP Version 4 Sockets listázása
A TCP/IP 4-es verziójú protokollt használó socketeket a -4
(IPV4) opcióval lehet listázni:
ss -a -4
IP Version 6 Sockets listázása
A megfelelő IP Version 6 szűrőt a -6
(IPV6) opcióval kapcsolhatja be, a következőképpen:
ss -a -6
Listing Sockets By State
A state
opcióval a foglalatokat az állapotuk szerint listázhatja. Ez a létrehozott, figyelő vagy zárt állapotokkal működik. Használjuk a resolve opciót is (-r
), amely megpróbálja felbontani a hálózati címeket nevekre, a portokat pedig protokollokra.
A következő parancs a létrehozott TCP-kapcsolatokat keresi, és a ss
megpróbálja felbontani a neveket:
ss -t -r state established
Négy olyan kapcsolatot listáz, amelyek a létrehozott állapotban vannak. A hostnév, ubuntu20-04, feloldásra került, és a második sorban az SSH-kapcsolatnál 22 helyett “ssh” szerepel.
Megismételhetjük ezt, hogy figyelő állapotban lévő aljzatokat keressünk:
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 :*
Aljzatok listázása protokoll szerint
A cél- és forrásportokat jelölő dport
és sport
opciókkal listázhatjuk az adott protokollt használó aljzatokat.
A HTTPS protokollt használó foglalatok listázásához egy established
kapcsolaton a következőt írjuk be (figyeljük meg a szóközt a nyitó zárójel után és a záró zárójel előtt):
ss -a state established '( dport = :https or sport = :https )'
A protokoll nevét vagy az adott protokollhoz általában kapcsolódó portot is használhatjuk. A Secure Shell (SSH) alapértelmezett portja a 22-es port.
Egy parancsban használjuk a protokoll nevét, majd megismételjük azt a portszámmal:
ss -a '( dport = :ssh or sport = :ssh )'
ss -a '( dport = :22 or sport = :22 )'
Mint várható volt, ugyanazokat az eredményeket kapjuk.
Egy adott IP-címre irányuló kapcsolatok listázása
A dst
(cél) opcióval egy adott cél IP-címre irányuló kapcsolatokat listázhatunk.
A következőket írjuk be:
ss -a dst 192.168.4.25
Folyamatok azonosítása
Hogy lássuk, mely folyamatok használják a foglalatokat, használhatjuk a processes opciót (-p
), az alábbiakban látható módon (megjegyezzük, hogy a sudo
-t kell használni):
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))
Ez azt mutatja, hogy a TCP aljzatokon létrehozott két kapcsolatot az SSH démon és a Firefox használja.
Egy méltó utód
A ss
parancs ugyanazokat az információkat szolgáltatja, mint korábban a netstat
, de egyszerűbb, könnyebben hozzáférhető módon. További opciókat és tippeket a man oldalon találsz.