A terminál ablak egy Linux laptop rendszerben.
Fatmawati Achmad Zaenuri/

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.

Articles

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.