Hvordan bruke netstat på Linux

Linux netstat-kommandoen gir deg en skattekiste av informasjon om nettverkstilkoblingene dine, portene som er i bruk og prosessene som bruker dem. Lær hvordan du bruker den.

Porter, prosesser og protokoller

Nettverkskontakter kan enten kobles til eller venter på en tilkobling. Tilkoblingene bruker nettverksprotokoller som Transportkontrollprotokoll (TCP) eller User Datagram Protocol UDP. De bruker Internett protokoll adresser og nettverksporter å etablere forbindelser.

Ordet sockets kan fremmane bilder av et fysisk tilkoblingspunkt for en ledning eller kabel, men i denne sammenhengen er en socket en programvarekonstruksjon som brukes til å håndtere den ene enden av en nettverksdatatilkobling.

Sockets har to hovedtilstander: De er enten tilkoblet og tilrettelegger for en pågående nettverkskommunikasjon, eller de venter på en innkommende tilkobling for å koble til dem. Det er andre tilstander, for eksempel tilstanden når en socket er midtveis i å etablere en forbindelse på en ekstern enhet, men hvis du legger forbigående tilstander til side, kan du tenke på en socket som enten å være tilkoblet eller ventende (som ofte kalles lytting).

Lyttekontakten kalles serveren, og kontakten som ber om en forbindelse med lyttekontakten kalles en klient. Disse navnene har ingenting å gjøre med maskinvare eller datamaskinroller. De definerer ganske enkelt rollen til hver stikkontakt i hver ende av forbindelsen.

Netstat-kommandoen lar deg finne ut hvilke stikkontakter som er tilkoblet og hvilke stikkontakter som lytter. Det betyr at den forteller deg hvilke porter som er i bruk og hvilke prosesser som bruker dem. Den kan vise deg rutingtabeller og statistikk om din nettverksgrensesnitt og multicast-tilkoblinger.

Funksjonaliteten til netstat har blitt replikert over tid i forskjellige Linux-verktøy, som f.eks ip og ss. Det er fortsatt verdt å kjenne denne bestefaren til alle nettverksanalysekommandoer, fordi den er tilgjengelig på alle Linux- og Unix-lignende operativsystemer, og til og med på Windows og Mac.

Her er hvordan du bruker det, komplett med eksempelkommandoer.

Viser alle stikkontakter

Alternativet -a (alle) får netstat til å vise alle tilkoblede og ventende stikkontakter. Denne kommandoen vil sannsynligvis gi en lang liste, så vi overfører den til mindre.

netstat -a | less

Listen inkluderer TCP (IP), TCP6 (IPv6) og UDP-kontakter.

Omslaget i terminalvinduet gjør det litt vanskelig å se hva som skjer. Her er et par deler fra listen:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address State 
tcp        0      0 localhost:domain  0.0.0.0:*       LISTEN 
tcp        0      0 0.0.0.0:ssh       0.0.0.0:*       LISTEN 
tcp        0      0 localhost:ipp     0.0.0.0:*       LISTEN 
tcp        0      0 localhost:smtp    0.0.0.0:*       LISTEN 
tcp6       0      0 [::]:ssh          [::]:*          LISTEN 
tcp6       0      0 ip6-localhost:ipp [::]:*          LISTEN 
.
.
.
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags   Type     State       I-Node  Path
unix  24     [ ]     DGRAM                12831   /run/systemd/journal/dev-log
unix  2      [ ACC ] STREAM    LISTENING  24747   @/tmp/dbus-zH6clYmvw8
unix  2      [ ]     DGRAM                26372   /run/user/1000/systemd/notify
unix  2      [ ]     DGRAM                23382   /run/user/121/systemd/notify
unix  2      [ ACC ] SEQPACKET LISTENING  12839   /run/udev/control

«Aktivt Internett»-delen viser tilkoblede eksterne tilkoblinger og lokale stikkontakter som lytter etter eksterne tilkoblingsforespørsler. Det vil si at den viser nettverkstilkoblingene som er (eller vil bli) opprettet til eksterne enheter.

«UNIX-domene»-delen viser de tilkoblede og lyttende interne tilkoblingene. Med andre ord viser den forbindelsene som er opprettet på datamaskinen din mellom ulike applikasjoner, prosesser og elementer i operativsystemet.

«Aktivt Internett»-kolonnene er:

Proto: Protokollen som brukes av denne kontakten (for eksempel TCP eller UDP).
Recv-Q: Mottakskøen. Dette er innkommende byte som har blitt mottatt og bufret, og venter på at den lokale prosessen som bruker denne tilkoblingen, leser og forbruker dem.
Send-Q: Sendekøen. Dette viser bytene som er klare til å sendes fra sendekøen.
Lokal adresse: Adressedetaljene til den lokale enden av forbindelsen. Standard er at netstat viser det lokale vertsnavnet for adressen, og navnet på tjenesten for porten.
Utenlandsk adresse: Adressen og portnummeret til den eksterne enden av tilkoblingen.
Tilstand: Tilstanden til den lokale stikkontakten. For UDP-stikkontakter er denne vanligvis blank. Se tilstandstabellen nedenfor.

  Slik ser du YouTube på Linux-skrivebordet med FreeTube

For TCP-tilkoblinger kan tilstandsverdien være en av følgende:

LYTT: Kun på serversiden. Stikkontakten venter på en tilkoblingsforespørsel.
SYN-SENT: Kun på klientsiden. Denne kontakten har laget en tilkoblingsforespørsel og venter på å se om den blir akseptert.
SYN-MOTTATT: Kun på serversiden. Denne kontakten venter på en tilkoblingsbekreftelse etter å ha akseptert en tilkoblingsforespørsel.
ETABLERT: Server og klienter. Det er etablert en fungerende forbindelse mellom serveren og klienten, slik at data kan overføres mellom de to.
FIN-WAIT-1: Server og klienter. Denne kontakten venter på en forespørsel om tilkoblingsavslutning fra den eksterne kontakten, eller på en bekreftelse på en forespørsel om tilkoblingsavslutning som tidligere ble sendt fra denne kontakten.
FIN-WAIT-2: Server og klienter. Denne kontakten venter på en forespørsel om tilkoblingsavslutning fra den eksterne kontakten.
CLOSE-WAIT: Server og klient. Denne kontakten venter på en forespørsel om tilkoblingsavslutning fra den lokale brukeren.
SLUKKING: Server og klienter. Denne kontakten venter på en bekreftelse på en forespørsel om tilkoblingsavslutning fra den eksterne kontakten.
LAST-ACK: Server og klient. Denne kontakten venter på en bekreftelse av forespørselen om tilkoblingsavslutning den sendte til den eksterne kontakten.
TIME-WAIT: Server og klienter. Denne kontakten sendte en bekreftelse til den eksterne kontakten for å informere den om at den mottok forespørselen om avslutning av den eksterne kontakten. Det venter nå på å forsikre seg om at bekreftelsen ble mottatt.
STENGT: Det er ingen forbindelse, så stikkontakten er terminert.

«Unix-domene»-kolonnene er:

Proto: Protokollen som brukes av denne kontakten. Det vil være «unix.»
RefCnt: ​​Referansetelling. Antall tilknyttede prosesser koblet til denne kontakten.
Flagg: Dette er vanligvis satt til ACC , som representerer SO_ACCEPTON, noe som betyr at kontakten venter på en tilkoblingsforespørsel. SO_WAITDATA, vist som W, betyr at det er data som venter på å bli lest. SO_NOSPACE, vist som N, betyr at det ikke er plass til å skrive data til kontakten (dvs. sendebufferen er full).
Type: Sokkeltypen. Se typetabellen nedenfor.
Tilstand: Tilstanden til stikkontakten. Se tilstandstabellen nedenfor.
I-Node: Filsysteminoden knyttet til denne kontakten.
Bane: Filsystembanen til sokkelen.

Unix-domenekontakttypen kan være en av følgende:

DGRAM: Sokkelen brukes i datagrammodus, ved bruk av meldinger med fast lengde. Datagrammer er verken garantert å være pålitelige, sekvenserte eller uduplikerte.
STREAM: Denne kontakten er en stream-kontakt. Dette er den vanlige «normale» typen stikkontakt. Disse kontaktene er designet for å gi pålitelig sekvensert (i rekkefølge) levering av pakker.
RAW: Denne kontakten brukes som en råkontakt. Raw sockets opererer på nettverksnivået til OSI-modell og ikke referer til TCP- og UDP-overskrifter fra transportnivået.
RDM: Denne kontakten er plassert i den ene enden av en pålitelig levert meldingsforbindelse.
SEQPACKET: Denne kontakten fungerer som en sekvensiell pakkekontakt, som er en annen måte å gi pålitelig, sekvensert og uduplikert pakkelevering.
PAKKE: Raw interface access socket. Pakkesokler brukes til å motta eller sende råpakker på enhetsdrivernivået (dvs. datalinklag) til OSI-modellen.

Unix-domenekontakttilstanden kan være en av følgende:

GRATIS: Denne kontakten er ikke tildelt.
LYTTET: Denne kontakten lytter etter innkommende tilkoblingsforespørsler.
TILKOBLING: Denne kontakten er i ferd med å kobles til.
TILKOBLET: En forbindelse er opprettet, og kontakten kan motta og overføre data.
KOBLER UT: Forbindelsen er i ferd med å bli avsluttet.

Wow, det er mye informasjon! Mange av netstat-alternativene avgrenser resultatene på en eller annen måte, men de endrer ikke innholdet for mye. La oss ta en titt.

Oppføring av stikkontakter etter type

Netstat -a-kommandoen kan gi mer informasjon enn du trenger å se. Hvis du bare vil eller trenger å se TCP-kontaktene, kan du bruke alternativet -t (TCP) for å begrense visningen til kun å vise TCP-kontaktene.

netstat -at | less

Displayet ut er sterkt redusert. De få stikkontaktene som er oppført er alle TCP-stikkontakter.

Alternativene -u (UDP) og -x (UNIX) oppfører seg på lignende måte, og begrenser resultatene til typen socket spesifisert på kommandolinjen. Her er alternativet -u (UDP) som er i bruk:

netstat -au | less

Kun UDP-stikkontakter er oppført.

  Hvordan sette opp og bruke Fragments BitTorrent Client på Linux

Oppføring av stikkontakter etter stat

For å se kontaktene som er i lytte- eller ventetilstand, bruk alternativet -l (lytting).

netstat -l | less

Kontaktene som er oppført er de som er i lyttetilstand.

Dette kan kombineres med alternativene -t (TCP, -u (UDP) og -x (UNIX) for å komme deg videre inn på kontaktene av interesse. La oss se etter lyttende TCP-kontakter:

netstat -lt | less

Nå ser vi bare TCP-lyttekontakter.

Nettverksstatistikk etter protokoll

For å se statistikk for en protokoll, bruk alternativet -s (statistikk) og send inn alternativene -t (TCP), -u (UDP) eller -x (UNIX). Hvis du bare bruker alternativet -s (statistikk) alene, vil du se statistikk for alle protokoller. La oss sjekke statistikken for TCP-protokollen.

netstat -st | less

En samling av statistikk for TCP-forbindelsene vises i mindre.

Viser prosessnavn og PID-er

Det kan være nyttig å se prosess-ID (PID) av prosessen ved hjelp av en socket, sammen med navnet på den prosessen. Alternativet -p (program) gjør nettopp det. La oss se hva PID-ene og prosessnavnene er for prosessene som bruker en TCP-socket som er i lyttetilstand. Vi bruker sudo for å sikre at vi mottar all informasjon som er tilgjengelig, inkludert all informasjon som normalt krever root-tillatelser.

sudo netstat -p -at

Her er utdataene i en formatert tabell:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address       Foreign Address   State    PID/Program name 
tcp      0        0 localhost:domain    0.0.0.0:*         LISTEN   6927/systemd-resolv 
tcp      0        0 0.0.0.0:ssh         0.0.0.0:*         LISTEN   751/sshd 
tcp      0        0 localhost:ipp       0.0.0.0:*         LISTEN   7687/cupsd 
tcp      0        0 localhost:smtp      0.0.0.0:*         LISTEN   1176/master 
tcp6     0        0 [::]:ssh            [::]:*            LISTEN   751/sshd 
tcp6     0        0 ip6-localhost:ipp   [::]:*            LISTEN   7687/cupsd 
tcp6     0        0 ip6-localhost:smtp  [::]:*            LISTEN   1176/master

Vi har en ekstra kolonne kalt «PID/programnavn.» Denne kolonnen viser PID og navnet på prosessen som bruker hver av kontaktene.

Oppføring av numeriske adresser

Et annet skritt vi kan ta for å fjerne noe tvetydighet er å vise de lokale og eksterne adressene som IP-adresser i stedet for deres løste domene og vertsnavn. Hvis vi bruker alternativet -n (numerisk), vises IPv4-adressene i stiplet desimalformat:

sudo netstat -an | less

IP-adressene vises som numeriske verdier. Portnumrene vises også, atskilt med et kolon ” : ” fra IP-adressen.

En IP-adresse på 127.0.0.1 viser at kontakten er bundet til loopback-adressen til den lokale datamaskinen. Du kan tenke på en IP-adressen er 0.0.0.0 som betyr «standardruten» for lokale adresser, og «en hvilken som helst IP-adresse» for utenlandske adresser. IPv6-adresser vist som «::» er også alle null-adresser.

Portene som er oppført kan enkelt sjekket for å se hva deres vanlige formål er:

22: Dette er Sikkert skall (SSH) lytteport.
25: Denne Enkel e-postoverføringsprotokoll (SMTP) lytteport.
53: Dette er domenenavn system (DNS) lytteport.
68: Dette er Dynamic Host Configuration Protocol (DHCP) lytteport.
631: Dette er Felles UNIX-utskriftssystem (CUPS) lytteport.

Viser rutetabellen

Alternativet -r (rute) viser kjernerutingstabellen.

sudo netstat -r

Her er utdataene i en pen tabell:

Kernel IP routing table
Destination   Gateway       Genmask        Flags  MSS  Window  irtt  Iface
default       Vigor.router  0.0.0.0        UG       0  0          0  enp0s3
link-local    0.0.0.0       255.255.0.0    U        0  0          0  enp0s3
192.168.4.0   0.0.0.0       255.255.255.0  U        0  0          0  enp0s3

Og her er hva kolonnene betyr:

Destinasjon: Destinasjonsnettverket eller destinasjonsvertsenheten (hvis destinasjonen ikke er et nettverk).
Gateway: Gateway-adressen. En stjerne «*» vises her hvis en gateway-adresse ikke er angitt.
Genmaske: Subnettmasken for ruten.
Flagg: Se flaggtabellen nedenfor.
MSS: Standard maksimal segmentstørrelse for TCP-tilkoblinger over denne ruten – dette er den største mengden data som kan mottas i ett TCP-segment.
Vindu: The standard vindusstørrelse for TCP-tilkoblinger over denne ruten, som indikerer antall pakker som kan overføres og mottas før mottaksbufferen er full. I praksis blir pakkene konsumert av den mottakende applikasjonen.
irtt: The Initial Rundturstid. Denne verdien refereres til av kjernen for å gjøre dynamiske justeringer av TCP-parametere for eksterne tilkoblinger som reagerer tregt.
Iface: Nettverksgrensesnittet som pakkene som sendes over denne ruten overføres fra.

  Hvordan lage aliaser og skallfunksjoner på Linux

Flaggverdien kan være en av:

U: Ruten er opp.
H: Målet er en vert og den eneste destinasjonen som er mulig på denne ruten.
G: Bruk gatewayen.
R: Gjenopprett ruten for dynamisk ruting.
D: Dynamisk installert av rutingdemonen.
M: Modifisert av rutedemonen når den mottok en Internet Control Message Protocol (ICMP) pakke.
A: Installert av addrconf, den automatiserte DNS- og DHCP-konfigurasjonsfilgeneratoren.
C: Cache-oppføring.
!: Avvis rute.

Finne porten som brukes av en prosess

Hvis vi sender utdataene fra netstat gjennom grep, kan vi søke etter en prosess ved navn og identifisere porten den bruker. Vi bruker alternativene -a (alle), -n (numerisk) og -p (program) som ble brukt tidligere, og søker etter «sshd.»

sudo netstat -anp | grep "sshd"

sudo netstat -anp |  grep

grep finner målstrengen, og vi ser at sshd-demonen bruker port 22.

Selvfølgelig kan vi også gjøre dette omvendt. Hvis vi søker etter «:22», kan vi finne ut hvilken prosess som bruker den porten, hvis noen.

sudo netstat -anp | grep ":22"

sudo netstat -anp |  grep

Denne gangen finner grep målstrengen «:22», og vi ser at prosessen som bruker denne porten er sshd-demonen, prosess-ID 751.

List opp nettverksgrensesnittene

Alternativet -i (grensesnitt) vil vise en tabell over nettverksgrensesnittene som netstat kan oppdage.

sudo netstat -i

Her er utgangen på en mer lesbar måte:

Kernel Interface table
Iface     MTU   RX-OK  RX-ERR  RX-DRP  RX-OVR    TX-OK   TX-ERR   TX-DRP   TX-OVR Flg
enp0s3   1500 4520671       0       0  0       4779773        0        0        0 BMRU
lo      65536   30175       0       0  0         30175        0        0        0 LRU

Dette er hva kolonnene betyr:

Iface: Navnet på grensesnittet. Enp0s3-grensesnittet er nettverksgrensesnittet til omverdenen, og lo-grensesnittet er loopback-grensesnittet. Loopback-grensesnittet gjør det mulig for prosesser å kommunisere i datamaskinen ved hjelp av nettverksprotokoller, selv om datamaskinen ikke er koblet til et nettverk.
MTU: Den Maksimal overføringsenhet (MTU). Dette er den største «pakken» som kan sendes. Den består av en overskrift som inneholder rute- og protokollflagg, og andre metadata, pluss dataene som faktisk blir transportert.
RX-OK: Antall mottatte pakker, uten feil.
RX-ERR: Antall mottatte pakker, med feil. Vi ønsker at dette skal være så lavt som mulig.
RX-DRP: Antall pakker droppet (dvs. tapt). Vi ønsker også at dette skal være så lavt som mulig.
RX-OVR: Antall pakker tapt på grunn av overløp ved mottak. Dette betyr vanligvis at mottaksbufferen var full og ikke kunne akseptere flere data, men mer data ble mottatt og måtte forkastes. Jo lavere dette tallet er, jo bedre, og null er perfekt.
TX-OK: Antall pakker som er overført, uten feil.
RX-ERR: Antall pakker som er overført, med feil. Vi ønsker at dette skal være null.
RX-DRP: Antall pakker som ble droppet ved overføring. Ideelt sett bør dette være null.
RX-OVR: Antall pakker tapt på grunn av overløp ved overføring. Dette betyr vanligvis at sendebufferen var full og ikke kunne akseptere flere data, men mer data var klar til å overføres og måtte forkastes.
Flg: Flagg. Se flaggtabellen nedenfor.

Flaggene representerer følgende:

B: En kringkastingsadresse er i bruk.
L: Dette grensesnittet er en loopback-enhet.
M: Alle pakker mottas (dvs. i promiskuøs modus). Ingenting blir filtrert eller forkastet.
O: Adresseoppløsningsprotokoll (ARP) er slått av for dette grensesnittet.
P: Dette er en Punkt til punkt (PPP) tilkobling.
R: Grensesnittet kjører.
U: Grensesnittet er oppe.

Liste Multicast-gruppemedlemskap

Enkelt sagt, a multicast-overføring gjør det mulig å sende en pakke én gang, uavhengig av antall mottakere. For tjenester som for eksempel videostrømming øker dette effektiviteten fra avsenderens synspunkt enormt mye.

Alternativet -g (grupper) får netstat til å liste multicast-gruppemedlemskapet til sockets på hvert grensesnitt.

sudo netstat -g

Kolonnene er ganske enkle:

Grensesnitt: Navnet på grensesnittet som kontakten sender over.
RefCnt: ​​Referanseantallet, som er antall prosesser knyttet til stikkontakten.
Gruppe: Navnet eller identifikatoren til multicast-gruppen.

The New Kids on the Block

De rute, ip, ifconfigog ss kommandoer kan gi mye av det netstat er i stand til å vise deg. De er alle flotte kommandoer og verdt å sjekke ut.

Vi har fokusert på netstat fordi det er universelt tilgjengelig, uavhengig av hvilket Unix-lignende operativsystem du jobber med, selv de obskure.