Hur man använder netstat på Linux

Linux-kommandot netstat ger dig en skattkammare av information om dina nätverksanslutningar, portarna som används och processerna som använder dem. Lär dig hur du använder den.

Portar, processer och protokoll

Nätverksuttag kan antingen anslutas eller väntar på en anslutning. Anslutningarna använder nätverksprotokoll som Transportkontrollprotokoll (TCP) eller användardatagram protokoll UDP. De använder internet protokoll adresser och nätverksportar att upprätta förbindelser.

Ordet sockets kan frammana bilder av en fysisk anslutningspunkt för en ledning eller kabel, men i detta sammanhang är en socket en mjukvarukonstruktion som används för att hantera ena änden av en nätverksdataanslutning.

Sockets har två huvudtillstånd: De är antingen anslutna och underlättar en pågående nätverkskommunikation, eller så väntar de på en inkommande anslutning för att ansluta till dem. Det finns andra tillstånd, till exempel tillståndet när ett uttag är halvvägs genom att upprätta en anslutning på en fjärrenhet, men om man lägger övergående tillstånd åt sidan kan du tänka på att ett uttag antingen är anslutet eller väntar (vilket ofta kallas för att lyssna).

Lyssningsuttaget kallas servern, och uttaget som begär en anslutning till lyssningsuttaget kallas klient. Dessa namn har ingenting att göra med hårdvara eller datorroller. De definierar helt enkelt rollen för varje uttag i varje ände av anslutningen.

Netstat-kommandot låter dig upptäcka vilka uttag som är anslutna och vilka uttag som lyssnar. Det betyder att det talar om för dig vilka portar som används och vilka processer som använder dem. Den kan visa dig routingtabeller och statistik om din nätverksgränssnitt och multicast-anslutningar.

Funktionaliteten hos netstat har replikerats över tiden i olika Linux-verktyg, som t.ex ip och ss. Det är fortfarande värt att känna till denna farfar till alla nätverksanalyskommandon, eftersom den är tillgänglig på alla Linux- och Unix-liknande operativsystem, och även på Windows och Mac.

Så här använder du det, komplett med exempelkommandon.

Lista alla uttag

Alternativet -a (alla) gör att netstat visar alla anslutna och väntande uttag. Det här kommandot kan skapa en lång listning, så vi rör det till mindre.

netstat -a | less

Listan inkluderar TCP (IP), TCP6 (IPv6) och UDP-uttag.

Omslaget i terminalfönstret gör det lite svårt att se vad som pågår. Här är ett par avsnitt från listan:

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

Avsnittet ”Aktivt Internet” listar de anslutna externa anslutningarna och lokala uttag som lyssnar efter förfrågningar om fjärranslutningar. Det vill säga, den listar de nätverksanslutningar som är (eller kommer att upprättas) till externa enheter.

Avsnittet ”UNIX-domän” listar de anslutna och lyssnande interna anslutningarna. Med andra ord listar den de anslutningar som har upprättats i din dator mellan olika applikationer, processer och delar av operativsystemet.

Kolumnerna ”Aktivt Internet” är:

Proto: Protokollet som används av denna socket (till exempel TCP eller UDP).
Recv-Q: Mottagningskön. Dessa är inkommande byte som har tagits emot och buffrats och väntar på att den lokala processen som använder den här anslutningen ska läsa och konsumera dem.
Send-Q: Sändkön. Detta visar de byte som är redo att skickas från sändningskön.
Lokal adress: Adressuppgifterna för den lokala änden av anslutningen. Standard är att netstat visar det lokala värdnamnet för adressen och namnet på tjänsten för porten.
Utländsk adress: Adressen och portnumret för anslutningens fjärrände.
Status: Tillståndet för det lokala uttaget. För UDP-uttag är detta vanligtvis tomt. Se tillståndstabellen nedan.

För TCP-anslutningar kan tillståndsvärdet vara något av följande:

LYSSNA: Endast serversidan. Uttaget väntar på en anslutningsbegäran.
SYN-SÄNT: Endast på klientsidan. Detta uttag har gjort en anslutningsbegäran och väntar på att se om den kommer att accepteras.
SYN MOTTAGET: Endast serversidan. Detta uttag väntar på en anslutningsbekräftelse efter att ha accepterat en anslutningsbegäran.
ETABLERAT: 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. Detta uttag väntar på en begäran om anslutningsavslutning från fjärruttaget, eller på en bekräftelse på en begäran om anslutningsavslutning som tidigare skickats från detta uttag.
FIN-WAIT-2: Server och klienter. Detta uttag väntar på en begäran om anslutningsavslutning från fjärruttaget.
CLOSE-WAIT: Server och klient. Detta uttag väntar på en begäran om anslutningsavslutning från den lokala användaren.
STÄNGNING: Server och klienter. Detta uttag väntar på en bekräftelse på en begäran om anslutningsavslutning från fjärruttaget.
LAST-ACK: Server och klient. Detta uttag väntar på en bekräftelse på begäran om anslutningsavslutning som den skickade till fjärruttaget.
TIME-WAIT: Server och klienter. Detta uttag skickade en bekräftelse till fjärruttaget för att meddela att det tog emot fjärruttagets begäran om uppsägning. Det väntar nu på att säkerställa att bekräftelsen mottogs.
STÄNGD: Det finns ingen anslutning, så uttaget har avslutats.

Kolumnerna ”Unix-domän” är:

Proto: Protokollet som används av denna socket. Det kommer att vara ”unix”.
RefCnt: ​​Referensantal. Antalet anslutna processer som är anslutna till detta uttag.
Flaggor: Detta är vanligtvis satt till ACC , vilket representerar SO_ACCEPTON, vilket betyder att uttaget väntar på en anslutningsbegäran. SO_WAITDATA, visat som W, betyder att det finns data som väntar på att läsas. SO_NOSPACE, visat som N, betyder att det inte finns något utrymme för att skriva data till sockeln (dvs. sändningsbufferten är full).
Typ: Sockeltypen. Se typtabellen nedan.
Tillstånd: Uttagets tillstånd. Se tillståndstabellen nedan.
I-Node: Filsystemets inod som är associerad med denna socket.
Sökväg: Filsystemets sökväg till socket.

Unix-domänsockettypen kan vara en av följande:

DGRAM: Sockeln används i datagramläge, med meddelanden med fast längd. Datagram är varken garanterat tillförlitliga, sekvenserade eller opuplikerade.
STREAM: Detta uttag är ett streamuttag. Detta är den vanliga ”normala” typen av uttag. Dessa uttag är designade för att ge tillförlitlig sekvenserad (i ordning) leverans av paket.
RAW: Detta uttag används som ett råuttag. Raw-uttag fungerar på nätverksnivå OSI-modell och hänvisa inte till TCP- och UDP-rubriker från transportnivån.
RDM: Detta uttag är placerat i ena änden av en tillförlitligt levererad meddelandeanslutning.
SEQPACKET: Denna socket fungerar som en sekventiell paketsocket, vilket är ett annat sätt att tillhandahålla pålitlig, sekvenserad och odubblerad paketleverans.
PACKET: Raw interface access socket. Paketuttag används för att ta emot eller skicka råpaket på enhetsdrivrutinsnivån (dvs. datalänkslager) för OSI-modellen.

Unix-domänsockettillståndet kan vara något av följande:

GRATIS: Detta uttag är otilldelat.
LYSSNA: Detta uttag lyssnar efter inkommande anslutningsförfrågningar.
ANSLUTNING: Detta uttag håller på att anslutas.
ANSLUTEN: En anslutning har upprättats och uttaget kan ta emot och överföra data.
KOPPLINGAR FRÅN: Anslutningen håller på att avslutas.

Oj, det är mycket information! Många av netstat-alternativen förfinar resultaten på ett eller annat sätt, men de ändrar inte innehållet för mycket. Låt oss ta en titt.

Lista Sockets efter typ

Kommandot netstat -a kan ge mer information än du behöver se. Om du bara vill eller behöver se TCP-sockets, kan du använda alternativet -t (TCP) för att begränsa visningen till att endast visa TCP-sockets.

netstat -at | less

Displayen ut är kraftigt reducerad. De få uttag som är listade är alla TCP-uttag.

Alternativen -u (UDP) och -x (UNIX) fungerar på liknande sätt, vilket begränsar resultaten till den typ av socket som anges på kommandoraden. Här är alternativet -u (UDP) som används:

netstat -au | less

Endast UDP-uttag är listade.

Lista Sockets efter stat

För att se uttagen som är i lyssnings- eller vänteläge, använd alternativet -l (lyssnande).

netstat -l | less

De uttag som är listade är de som är i lyssningsläge.

Detta kan kombineras med alternativen -t (TCP, -u (UDP) och -x (UNIX) för att komma in på uttagen av intresse. Låt oss leta efter lyssnande TCP-uttag:

netstat -lt | less

Nu ser vi bara TCP-lyssningsuttag.

Nätverksstatistik per protokoll

För att se statistik för ett protokoll, använd alternativet -s (statistik) och skicka in alternativen -t (TCP), -u (UDP) eller -x (UNIX). Om du bara använder -s (statistik) alternativet på egen hand, kommer du att se statistik för alla protokoll. Låt oss kolla statistiken för TCP-protokollet.

netstat -st | less

En samling statistik för TCP-anslutningarna visas på mindre.

Visar processnamn och PID

Det kan vara användbart att se process-ID (PID) för processen med hjälp av en socket, tillsammans med namnet på den processen. Alternativet -p (program) gör just det. Låt oss se vad PID:erna och processnamnen är för processerna som använder en TCP-socket som är i lyssningsläge. Vi använder sudo för att se till att vi får all information som är tillgänglig, inklusive all information som normalt skulle kräva root-behörigheter.

sudo netstat -p -at

Här är utdata i en formaterad 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 extra kolumn som heter ”PID/programnamn.” Denna kolumn listar PID och namn på processen med var och en av uttagen.

Lista numeriska adresser

Ett annat steg vi kan ta för att ta bort viss oklarhet är att visa de lokala och fjärranslutna adresserna som IP-adresser istället för deras lösta domäner och värdnamn. Om vi ​​använder alternativet -n (numeriskt) visas IPv4-adresserna i prickade decimalformat:

sudo netstat -an | less

IP-adresserna visas som numeriska värden. Portnumren visas också, separerade med ett kolon ” : ” från IP-adressen.

En IP-adress på 127.0.0.1 visar att sockeln är bunden till loopback-adress för den lokala datorn. Du kan tänka dig en IP-adressen 0.0.0.0 som betyder ”standardvägen” för lokala adresser och ”valfri IP-adress” för utländska adresser. IPv6-adresser som visas som ”::” är också alla nolladresser.

Portarna som är listade kan enkelt kontrolleras för att se vad deras vanliga syfte är:

22: Detta är Säkert skal (SSH) lyssningsport.
25: Det här Simple Mail Transfer Protocol (SMTP) lyssningsport.
53: Detta är domännamnssystem (DNS) lyssningsport.
68: Detta är Dynamic Host Configuration Protocol (DHCP) lyssningsport.
631: Detta är Vanligt UNIX-utskriftssystem (CUPS) lyssningsport.

Visar rutttabellen

Alternativet -r (route) visar kärnans routingtabell.

sudo netstat -r

Här är resultatet i en snygg 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

Och här är vad kolumnerna betyder:

Destination: Destinationsnätverket eller destinationsvärdenheten (om destinationen inte är ett nätverk).
Gateway: Gatewayadressen. En asterisk ”*” visas här om en gatewayadress inte är inställd.
Genmask: Subnätmasken för rutten.
Flaggor: Se flaggningstabellen nedan.
MSS: Standard för maximal segmentstorlek för TCP-anslutningar över denna rutt – detta är den största mängden data som kan tas emot i ett TCP-segment.
Fönster: The standard fönsterstorlek för TCP-anslutningar över denna rutt, anger antalet paket som kan överföras och tas emot innan mottagningsbufferten är full. I praktiken konsumeras paketen av den mottagande applikationen.
irtt: Initialen Rundturstid. Detta värde refereras av kärnan för att göra dynamiska justeringar av TCP-parametrar för fjärranslutningar som är långsamma att svara.
Iface: Nätverksgränssnittet från vilket paketen som skickas över denna rutt sänds.

Flaggans värde kan vara ett av:

U: Rutten är upp.
H: Målet är en värd och den enda möjliga destinationen på den här rutten.
G: Använd gatewayen.
R: Återställ rutten för dynamisk routing.
D: Dynamiskt installerat av routingdemonen.
M: Modifierad av routingdemonen när den fick en Internet Control Message Protocol (ICMP)-paket.
S: Installerad av addrconf, den automatiserade DNS- och DHCP-konfigurationsfilgeneratorn.
C: Cachepost.
!: Avvisa rutt.

Hitta porten som används av en process

Om vi ​​leder utdata från netstat genom grep kan vi söka efter en process med namn och identifiera porten den använder. Vi använder alternativen -a (alla), -n (numeriska) och -p (program) som användes tidigare och söker efter ”sshd.”

sudo netstat -anp | grep "sshd"

sudo netstat -anp |  grep

grep hittar målsträngen och vi ser att sshd-demonen använder port 22.

Naturligtvis kan vi också göra detta omvänt. Om vi ​​söker efter ”:22”, kan vi ta reda på vilken process som använder den porten, om någon.

sudo netstat -anp | grep ":22"

sudo netstat -anp |  grep

Den här gången hittar grep målsträngen ”:22”, och vi ser att processen som använder denna port är sshd-demonen, process-ID 751.

Lista nätverksgränssnitten

Alternativet -i (gränssnitt) visar en tabell över nätverksgränssnitten som netstat kan upptäcka.

sudo netstat -i

Här är resultatet på ett mer läsbart sätt:

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

Detta är vad kolumnerna betyder:

Iface: Namnet på gränssnittet. Enp0s3-gränssnittet är nätverksgränssnittet mot omvärlden, och lo-gränssnittet är loopback-gränssnittet. Loopback-gränssnittet gör det möjligt för processer att kommunicera inuti datorn med hjälp av nätverksprotokoll, även om datorn inte är ansluten till ett nätverk.
MTU: Den Maximal överföringsenhet (MTU). Detta är det största ”paketet” som kan skickas. Den består av en rubrik som innehåller routing- och protokollflaggor och annan metadata, plus den data som faktiskt transporteras.
RX-OK: Antalet mottagna paket utan fel.
RX-ERR: Antalet mottagna paket, med fel. Vi vill att detta ska vara så lågt som möjligt.
RX-DRP: Antalet paket som tappats (dvs. förlorat). Vi vill också att detta ska vara så lågt som möjligt.
RX-OVR: Antal paket förlorade på grund av överflöden vid mottagning. Detta innebär vanligtvis att mottagningsbufferten var full och inte kunde acceptera mer data, men mer data togs emot och måste kasseras. Ju lägre denna siffra desto bättre, och noll är perfekt.
TX-OK: Antalet paket som överförs, utan fel.
RX-ERR: Antalet överförda paket, med fel. Vi vill att detta ska vara noll.
RX-DRP: Antalet paket som tappades vid sändning. Helst bör detta vara noll.
RX-OVR: Antalet paket som går förlorade på grund av spill vid sändning. Detta betyder vanligtvis att sändningsbufferten var full och inte kunde acceptera mer data, men mer data var redo att överföras och måste kasseras.
Flg: Flaggor. Se flaggningstabellen nedan.

Flaggorna representerar följande:

B: En sändningsadress används.
L: Detta gränssnitt är en loopback-enhet.
M: Alla paket tas emot (dvs i promiskuöst läge). Ingenting filtreras eller kasseras.
O: Adressupplösningsprotokoll (ARP) är avstängd för detta gränssnitt.
P: Det här är en Punkt till punkt (PPP) anslutning.
R: Gränssnittet körs.
U: Gränssnittet är uppe.

Lista Multicast-gruppmedlemskap

Enkelt uttryckt, a multicast-överföring gör att ett paket endast kan skickas en gång, oavsett antalet mottagare. För tjänster som exempelvis videostreaming ökar detta effektiviteten ur avsändarens synvinkel enormt mycket.

Alternativet -g (grupper) gör att netstat listar multicast-gruppmedlemskapet för sockets på varje gränssnitt.

sudo netstat -g

Kolumnerna är ganska enkla:

Gränssnitt: Namnet på gränssnittet över vilket uttaget sänder.
RefCnt: ​​Referensantalet, vilket är antalet processer som är anslutna till sockeln.
Grupp: Namnet eller identifieraren för multicast-gruppen.

The New Kids on the Block

De rutt, ip, ifconfigoch ss kommandon kan ge mycket av det netstat kan visa dig. De är alla fantastiska kommandon och värda att kolla in.

Vi har fokuserat på netstat eftersom det är universellt tillgängligt, oavsett vilket Unix-liknande operativsystem du arbetar med, även de obskyra.