Ett terminalfönster på en bärbar dator i Linux.
Fatmawati Achmad Zaenuri/

Kommandot ss är en modern ersättning för det klassiska netstat. Du kan använda det på Linux för att få statistik om dina nätverksanslutningar. Här får du veta hur du arbetar med det här praktiska verktyget.

Sss-kommandot kontra netstat

Som ersättning för det föråldrade netstat-kommandot ger ss dig detaljerad information om hur din dator kommunicerar med andra datorer, nätverk och tjänster.

ss visar statistik för Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interprocess) och råa sockets. Raw sockets arbetar på nätverkets OSI-nivå, vilket innebär att TCP- och UDP-huvuden måste hanteras av programvaran, inte av transportlagret. ICMP-meddelanden (Internet Control Message Protocol) och ping-verktyget använder båda raw sockets.

Användning av ss

Du behöver inte installera ss, eftersom det redan är en del av en uppdaterad Linuxdistribution. Dess utdata kan dock vara mycket långa – vi har fått resultat som innehåller över 630 rader. Resultaten är också mycket breda.

På grund av detta har vi inkluderat textrepresentationer av de resultat vi fått, eftersom de inte skulle få plats i en skärmdump. Vi har trimmat dem för att göra dem mer hanterbara.

Listning av nätverksanslutningar

Användning av ss utan kommandoradsalternativ listar sockets som inte är lyssnande. Det vill säga, den listar de sockets som inte är i lyssningstillstånd.

För att se detta skriver du följande:

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

Kolumnerna ser ut på följande sätt:

  • Netid: Typ av socket. I vårt exempel har vi ”u_str”, en Unix stream, en ”udp” och ”icmp6”, en IP version 6 ICMP socket. Du hittar fler beskrivningar av Linux socket-typer i Linux man-sidor.
  • State:
  • Recv-Q: Status för sockeln: Antalet mottagna paket.
  • Send-Q: Antal mottagna paket: Antalet skickade paket.
  • Local Address:Port: Den lokala adressen och porten (eller motsvarande värden för Unix sockets).
  • Peer Address:Port: Fjärradressen och porten (eller motsvarande värden för Unix sockets).

För UDP-sockets är kolumnen ”State” vanligtvis tom. För TCP-uttag kan den vara något av följande:

  • LISTEN: Endast på serversidan. Socket väntar på en anslutningsbegäran.
  • SYN-SENT: Endast på klientsidan. Den här sockeln har gjort en anslutningsförfrågan och väntar på att se om den accepteras.
  • SYN-RECEIVED: Endast på serversidan. Den här sockeln väntar på en anslutningsbekräftelse efter att ha accepterat en anslutningsförfrågan.
  • ESTABLISHED: Server och klienter. En fungerande anslutning har upprättats mellan servern och klienten, vilket gör att data kan överföras mellan de två.
  • FIN-WAIT-1: Server och klienter. Den här sockeln väntar på en begäran om avslutande av anslutning från den fjärrkontrollerade sockeln eller en bekräftelse på en begäran om avslutande av anslutning som tidigare skickats från den här sockeln.
  • FIN-WAIT-2: Server och klienter. Den här sockeln väntar på en begäran om avslutande av anslutningen från fjärranslutningen.
  • CLOSE-WAIT: Server och klient. Den här sockeln väntar på en begäran om avslutande av anslutning från den lokala användaren.
  • CLOSING: Server och klienter. Den här sockeln väntar på en bekräftelse på begäran om avslutande av anslutning från den fjärrstyrda sockeln.
  • LAST-ACK: Server och klient. Den här sockeln väntar på en bekräftelse på den begäran om avslutande av anslutningen som den skickade till fjärranslutningen.
  • TIME-WAIT: Server och klienter. Den här sockeln skickade en bekräftelse till den fjärrstyrda sockeln för att låta den veta att den tagit emot den fjärrstyrda sockelns begäran om avslutande av anslutning. Den väntar nu för att försäkra sig om att bekräftelsen togs emot.
  • CLOSED: Det finns ingen anslutning, så sockeln har avslutats.

Lista över lyssnande socklar

För att se de lyssnande socklarna lägger vi till alternativet -l (lyssnande), så här:

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

Dessa socklar är alla oanslutna och lyssnar. ”rtnl” betyder routing netlink, som används för att överföra information mellan processer i kärnan och användarutrymmet.

Lista alla sockets

För att lista alla sockets kan du använda alternativet -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 :*

Utmatningen innehåller alla sockets, oberoende av tillstånd.

Lista över TCP-uttag

Du kan också tillämpa ett filter så att endast matchande uttag visas. Vi använder alternativet -t (TCP), så att endast TCP-uttag listas:

ss -a -t

Listning av UDP-uttag

Objektet -u (UDP) utför samma typ av filtrering. Den här gången visas endast UDP-uttag:

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

För att endast se Unix-uttag kan du inkludera alternativet -x (Unix), som visas nedan:

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

Filtret för råa sockets är alternativet -w (raw):

ss -a -w

Lista IP Version 4 Sockets

Sockets som använder TCP/IP version 4-protokollet kan listas med hjälp av alternativet -4 (IPV4):

ss -a -4

Lista IP Version 6 Sockets

Du kan aktivera det matchande IP version 6-filtret med alternativet -6 (IPV6) på följande sätt:

ss -a -6

Listning av sockets efter tillstånd

Du kan lista sockets efter det tillstånd de befinner sig i med alternativet state. Detta fungerar med etablerade, lyssnande eller stängda tillstånd. Vi kommer också att använda alternativet resolve (-r), som försöker lösa upp nätverksadresser till namn och portar till protokoll.

Följande kommando letar efter etablerade TCP-anslutningar och ss försöker lösa upp namnen:

ss -t -r state established

Fyra anslutningar listas som befinner sig i det etablerade tillståndet. Värdnamnet, ubuntu20-04, har lösts upp och ”ssh” visas i stället för 22 för SSH-anslutningen på den andra raden.

Vi kan upprepa detta för att leta efter sockets i listening state:

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

Lista sockets efter protokoll

Du kan lista sockets som använder ett visst protokoll med alternativen dport och sport, som representerar destinations- respektive källporten.

Vi skriver följande för att lista sockets som använder HTTPS-protokollet på en established-anslutning (observera mellanslag efter den inledande parentesen och före den avslutande parentesen):

ss -a state established '( dport = :https or sport = :https )'

Vi kan använda protokollnamnet eller porten som vanligen är associerad med det protokollet. Standardporten för Secure Shell (SSH) är port 22.

Vi använder protokollnamnet i ett kommando och upprepar det sedan med portnumret:

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

Som väntat får vi samma resultat.

Listning av anslutningar till en viss IP-adress

Med alternativet dst (destination) kan vi lista anslutningar till en viss IP-adress.

Vi skriver följande:

ss -a dst 192.168.4.25

Identifiera processer

För att se vilka processer som använder socklarna kan du använda processalternativet (-p), enligt nedanstående exempel (observera att du måste använda 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))

Detta visar att de två upprättade anslutningarna på TCP-socklar används av SSH-daemon och Firefox.

En värdig efterföljare

Kommandot ss ger samma information som tidigare gavs av netstat, men på ett enklare och mer lättillgängligt sätt. Du kan kolla in man-sidan för fler alternativ och tips.

Articles

Lämna ett svar

Din e-postadress kommer inte publiceras.