Et terminalvindue på et bærbart Linux-system.
Fatmawati Achmad Zaenuri/

Kommandoen ss er en moderne erstatning for den klassiske netstat. Du kan bruge den på Linux til at få statistik over dine netværksforbindelser. Her kan du se, hvordan du arbejder med dette praktiske værktøj.

Den ss-kommando versus netstat

Som erstatning for den forældede netstat-kommando giver ss dig detaljerede oplysninger om, hvordan din computer kommunikerer med andre computere, netværk og tjenester.

ss viser statistikker for Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interprocess) og raw sockets. Raw sockets opererer på netværkets OSI-niveau, hvilket betyder, at TCP- og UDP-headere skal håndteres af applikationssoftwaren og ikke af transportlaget. ICMP-meddelelser (Internet Control Message Protocol) og ping-værktøjet bruger begge raw sockets.

Brug af ss

Du behøver ikke at installere ss, da det allerede er en del af en opdateret Linux-distribution. Dens output kan dog være meget langt – vi har haft resultater, der indeholdt over 630 linjer. Resultaterne er også meget brede.

På grund af dette har vi inkluderet tekstrepræsentationer af de resultater, vi har opnået, da de ikke ville passe ind i et skærmbillede. Vi har beskåret dem for at gøre dem mere overskuelige.

Liste over netværksforbindelser

Ved anvendelse af ss uden kommandolinjeindstillinger oplistes sockets, der ikke lytter. Det vil sige, at den viser de sockets, der ikke er i lyttende tilstand.

For at se dette, skal du skrive følgende:

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

Kolonnerne er som følger:

  • Netid: Type af socket. I vores eksempel har vi “u_str”, en Unix-stream, en “udp” og “icmp6”, en IP version 6 ICMP-socket. Du kan finde flere beskrivelser af Linux-socket-typer i Linux-man-siderne.
  • State: Status: Den tilstand, som socket’en er i.
  • Recv-Q: Antallet af modtagne pakker.
  • Send-Q: Antal modtagne pakker: Antallet af sendte pakker.
  • Local Address:Port: Den lokale adresse og port (eller tilsvarende værdier for Unix-soketter).
  • Peer Address:Port: Den eksterne adresse og port (eller tilsvarende værdier for Unix-soketter).

For UDP-soketter er kolonnen “State” normalt blank. For TCP-soketter kan den være en af følgende:

  • LISTEN: Kun på server-siden. Socket’en venter på en forbindelsesanmodning.
  • SYN-SENT: Kun på klient-siden. Denne socket har lavet en forbindelsesanmodning og venter på at se, om den bliver accepteret.
  • SYN-RECEIVED: Kun på server-siden. Denne socket venter på en forbindelsesbekræftelse efter at have accepteret en forbindelsesanmodning.

  • ESTABLISHED: Server og klienter. Der er etableret en fungerende forbindelse mellem serveren og klienten, så der kan overføres data mellem de to.
  • FIN-WAIT-1: Server og klienter. Denne socket afventer en anmodning om forbindelsesafbrydelse fra fjernsocket eller en bekræftelse af en anmodning om forbindelsesafbrydelse, der tidligere er blevet sendt fra denne socket.
  • FIN-WAIT-2: Server og klienter. Denne socket afventer en anmodning om forbindelsesafbrydelse fra den eksterne socket.
  • CLOSE-WAIT: Server og klient. Denne socket afventer en anmodning om forbindelsesafbrydelse fra den lokale bruger.
  • CLOSING: Server og klienter. Denne socket afventer en bekræftelse på en anmodning om forbindelsesafbrydelse fra den eksterne socket.
  • LAST-ACK: Server og klient. Denne socket afventer en kvittering for den anmodning om forbindelsesafbrydelse, som den har sendt til den eksterne socket.
  • TIME-WAIT: Server og klienter. Denne socket har sendt en kvittering til fjernsocket for at lade den vide, at den har modtaget fjernsocketens anmodning om forbindelsesafbrydelse. Den venter nu for at sikre sig, at bekræftelsen blev modtaget.
  • CLOSED: Der er ingen forbindelse, så socket er blevet afsluttet.

Liste over lyttende sockets

For at se de lyttende sockets tilføjer vi -l (lyttende) som følger:

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

Disse sockets er alle uden forbindelse og lytter. “rtnl” betyder routing netlink, som bruges til at overføre oplysninger mellem kerne- og brugerrumsprocesser.

Liste over alle sockets

For at få en liste over alle sockets kan du bruge indstillingen -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 :*

Opdatet indeholder alle sockets, uanset tilstand.

Liste over TCP-soketter

Du kan også anvende et filter, så kun matchende soketter vises. Vi bruger indstillingen -t (TCP), så kun TCP-soketter vises:

ss -a -t

Liste over UDP-soketter

Indstillingen -u (UDP) udfører den samme type filtreringshandling. Denne gang vil vi kun se UDP-soketter:

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 af Unix-soketter

For kun at se Unix-soketter kan du inkludere indstillingen -x (Unix), som vist nedenfor:

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

Liste over rå sockets

Filtret for rå sockets er indstillingen -w (raw):

ss -a -w

Liste over IP Version 4-soketter

Soketter, der anvender TCP/IP version 4-protokollen, kan listes ved hjælp af indstillingen -4 (IPV4):

ss -a -4

Liste over IP version 6-soketter

Du kan aktivere det matchende IP version 6-filter med indstillingen -6 (IPV6) på følgende måde: -6 (IPV6):

ss -a -6

Liste over sockets efter tilstand

Du kan liste sockets efter den tilstand, de befinder sig i, med indstillingen state. Dette fungerer med etablerede, lyttende eller lukkede tilstande. Vi bruger også indstillingen resolve (-r), som forsøger at opløse netværksadresser til navne og porte til protokoller.

Den følgende kommando leder efter etablerede TCP-forbindelser, og ss forsøger at opløse navnene:

ss -t -r state established

Fire forbindelser, der er i den etablerede tilstand, er opført. Værtsnavnet, ubuntu20-04, er blevet opløst, og “ssh” vises i stedet for 22 for SSH-forbindelsen på den anden linje.

Vi kan gentage dette for at lede efter sockets i lyttende tilstand:

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

Liste over sockets efter protokol

Du kan liste de sockets, der bruger en bestemt protokol, med indstillingerne dport og sport, som repræsenterer henholdsvis destinations- og kildeportene.

Vi skriver følgende for at få vist en liste over sockets, der bruger HTTPS-protokollen på en established-forbindelse (bemærk mellemrummet efter den indledende parentes og før den afsluttende parentes):

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

Vi kan bruge protokolnavnet eller den port, der normalt er forbundet med den pågældende protokol. Standardporten for Secure Shell (SSH) er port 22.

Vi bruger protokolnavnet i én kommando og gentager den derefter med portnummeret:

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

Som forventet får vi de samme resultater.

Liste over forbindelser til en bestemt IP-adresse

Med indstillingen dst (destination) kan vi liste over forbindelser til en bestemt destinations-IP-adresse.

Vi skriver følgende:

ss -a dst 192.168.4.25

Identificering af processer

For at se, hvilke processer der bruger sockets, kan du bruge indstillingen processes (-p), som vist nedenfor (bemærk, at du skal bruge 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))

Dette viser os, at de to etablerede forbindelser på TCP-soketter bruges af SSH-dæmonen og Firefox.

En værdig efterfølger

Kommandoen ss giver de samme oplysninger, som tidligere blev leveret af netstat, men på en enklere og mere tilgængelig måde. Du kan tjekke man-siden for at få flere muligheder og tips.

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.