- Dave McKay
@TheGurkha
- 17 februari 2020, 8:00am EDT
het Linux netstat
commando geeft je een schat aan informatie over je netwerkverbindingen, de poorten die in gebruik zijn, en de processen die ze gebruiken. Leer hoe je het moet gebruiken.
poorten, processen en protocollen
netwerksockets kunnen worden verbonden of wachten op een verbinding., De verbindingen maken gebruik van netwerkprotocollen zoals Transport Control Protocol (TCP) of User Datagram Protocol UDP. Ze gebruiken Internetprotocoladressen en netwerkpoorten om verbindingen tot stand te brengen.
het woord sockets kan beelden oproepen van een fysiek verbindingspunt voor een kabel of kabel, maar in deze context is een socket een softwareconstructie die gebruikt wordt om één uiteinde van een netwerkdataverbinding te verwerken.,
Sockets hebben twee hoofdstatussen: ze zijn verbonden en faciliteren een doorlopende netwerkcommunicatie, of ze wachten op een inkomende verbinding om er verbinding mee te maken. Er zijn andere toestanden, zoals de toestand wanneer een socket halverwege het tot stand brengen van een verbinding op een apparaat op afstand, maar afgezien van voorbijgaande toestanden, kunt u denken aan een socket als ofwel verbonden of wachten (die vaak wordt genoemd luisteren).
De luistersocket wordt de server genoemd, en de socket die een verbinding met de luistersocket aanvraagt, wordt een client genoemd., Deze namen hebben niets te maken met hardware of computer rollen. Ze definiëren eenvoudig de rol van elke socket aan elk uiteinde van de verbinding.
het netstat
commando laat je zien welke sockets verbonden zijn en welke sockets luisteren. Dit betekent dat het je vertelt welke ports in gebruik zijn en welke processen ze gebruiken. Het kan u routeringstabellen en statistieken tonen over uw netwerkinterfaces en multicast-verbindingen.
de functionaliteit van netstat
is na verloop van tijd gerepliceerd in verschillende Linux utilities, zoals ip en ss., Het is nog steeds de moeite waard om deze grootvader van alle netwerk analyse commando ‘ s te kennen, omdat het beschikbaar is op alle Linux en Unix-achtige besturingssystemen, en zelfs op Windows en Mac.
Hier is hoe het te gebruiken, compleet met voorbeeldcommando ‘ s.
lijst van alle Sockets
de -a
(all) optie maakt netstat
Toon alle verbonden en wachtende sockets. Dit commando kan een lange lijst produceren, dus we pipe het naar less
.,
netstat -a | less
De lijst bevat TCP (IP), Tcp6 (IPv6) en UDP-sockets.
de omwikkeling in het terminalvenster maakt het een beetje moeilijk om te zien wat er aan de hand is. Hier zijn een paar secties van die lijst:
de “Active Internet” sectie toont de aangesloten externe verbindingen en lokale sockets die luisteren naar verzoeken om externe verbindingen. Dat wil zeggen, het geeft de netwerkverbindingen die zijn (of zal worden) vastgesteld op externe apparaten.,
de sectie “UNIX domain” toont de verbonden en luisterende interne verbindingen. Met andere woorden, het geeft de verbindingen die zijn vastgesteld binnen uw computer tussen verschillende toepassingen, processen, en elementen van het besturingssysteem.
de kolommen “actief Internet” zijn:
- Proto: het protocol dat door deze socket wordt gebruikt (bijvoorbeeld TCP of UDP).
- Recv-Q: de ontvangstwachtrij. Dit zijn inkomende bytes die zijn ontvangen en gebufferd, wachtend op het lokale proces dat deze verbinding gebruikt om ze te lezen en te consumeren.,
- Send-Q: de verzendwachtrij. Dit toont de bytes die klaar zijn om verzonden te worden vanuit de send wachtrij.
- lokaal adres: de adresgegevens van het lokale einde van de verbinding. De standaardwaarde is dat
netstat
de lokale hostnaam voor het adres toont, en de naam van de service voor de poort. - buitenlands adres: het adres en poortnummer van het externe einde van de verbinding.
- status: de status van de lokale socket. Voor UDP-sockets is dit meestal leeg. Zie de staatstabel hieronder.,
voor TCP-verbindingen kan de statuswaarde een van de volgende zijn :
- LISTEN: Server-side only. De socket wacht op een verbindingsaanvraag.
- SYN-SENT: alleen Client-side. Deze socket heeft een verbindingsaanvraag ingediend en wacht om te zien of deze wordt geaccepteerd.
- SYN-RECEIVED: alleen Server-side. Deze socket wacht op een bevestiging van de verbinding na het accepteren van een verbindingsaanvraag.
- gevestigd: Server en clients. Er is een werkende verbinding tot stand gebracht tussen de server en de client, waardoor gegevens kunnen worden overgedragen tussen de twee.,
- FIN-WAIT-1: Server en clients. Deze socket wacht op een verzoek tot beëindiging van de verbinding van de externe socket, of op een bevestiging van een verzoek tot beëindiging van de verbinding die eerder werd verzonden vanaf deze socket.
- FIN-WAIT-2: Server en clients. Deze socket wacht op een verzoek om verbinding te beëindigen van de externe socket.
- CLOSE-WAIT: Server en client. Deze socket wacht op een verzoek om verbinding te beëindigen van de lokale gebruiker.
- sluiten: Server en clients., Deze socket wacht op een verzoek om verbinding te beëindigen bevestiging van de externe socket.
- LAST-ACK: Server en client. Deze socket wacht op een bevestiging van het verzoek om verbinding te beëindigen dat het naar de externe socket heeft gestuurd.
- TIME-WAIT: Server en clients. Deze socket stuurde een bevestiging naar de remote socket om hem te laten weten dat hij het beëindigingsverzoek van de remote socket heeft ontvangen. Het is nu te wachten om ervoor te zorgen dat de bevestiging werd ontvangen.
- gesloten: Er is geen verbinding, dus de socket is beëindigd.,
de kolommen “Unix domain” zijn:
- Proto: het protocol dat door deze socket wordt gebruikt. Het zal “unix” zijn.”
- RefCnt: Reference count. Het aantal aangesloten processen verbonden met deze socket.
- Flags: dit wordt meestal ingesteld op
ACC
, watSO_ACCEPTON
vertegenwoordigt, wat betekent dat de socket wacht op een verbindingsaanvraag.SO_WAITDATA
, getoond alsW
, betekent dat er gegevens wachten om gelezen te worden.,SO_NOSPACE
, weergegeven alsN
, betekent dat er geen ruimte is om gegevens naar de socket te schrijven (d.w.z. dat de verzendbuffer vol is). - Type: het socket type. Zie de type tabel hieronder.
- status: de status van de socket. Zie de staatstabel hieronder.
- I-Node: de inode van het bestandssysteem die bij deze socket hoort.
- pad: het pad van het bestandssysteem naar de socket.
het Unix domein socket type kan een van de volgende zijn:
- DGRAM: de socket wordt gebruikt in datagram mode, met behulp van berichten van een vaste lengte., Datagrammen zijn niet gegarandeerd betrouwbaar, gesequenced, noch ongedupliceerd.
- STREAM: deze socket is een stream socket. Dit is het alledaagse “normale” type aansluiting. Deze sockets zijn ontworpen om betrouwbare sequenced (in-order) levering van pakketten te bieden.
- RAW: deze socket wordt gebruikt als een raw socket. Raw-sockets werken op het netwerkniveau van het OSI-Model en verwijzen niet naar TCP-en UDP-headers vanuit het transportniveau.
- RDM: deze socket bevindt zich aan één uiteinde van een betrouwbaar aangeleverde berichtenverbinding.,
- SEQPACKET: deze socket werkt als een sequentiële pakketsocket, wat een ander middel is om betrouwbare, sequenced en ongedupliceerde pakketlevering te bieden.
- PACKET: RAW interface access socket. Packet sockets worden gebruikt om ruwe pakketten te ontvangen of te verzenden op het niveau van het apparaatstuurprogramma (dat wil zeggen datalinklaag) van het OSI-model.
De status van de Unix-domeinsocket kan een van de volgende zijn:
- vrij: deze socket is niet toegewezen.
- luisteren: deze socket luistert naar binnenkomende verbindingsaanvragen.,
- verbinden: deze socket is bezig met verbinden.
- verbonden: er is een verbinding tot stand gebracht en de socket is in staat om gegevens te ontvangen en te verzenden.
- verbreken: de verbinding wordt momenteel beëindigd.
Wow, dat is veel informatie! Veel van de netstat
opties verfijnen de resultaten op een of andere manier, maar ze veranderen de inhoud niet te veel. Laten we eens kijken.,
Sockets weergeven op Type
het netstat -a
commando kan meer informatie geven dan u moet zien. Als u alleen de TCP-sockets wilt of wilt zien, kunt u de -t
(TCP) optie gebruiken om de weergave te beperken tot alleen TCP-sockets.
netstat -at | less
de weergave uit is sterk verminderd. De weinige sockets die worden weergegeven zijn allemaal TCP sockets.,
de opties -u
(UDP) en -x
(UNIX) gedragen zich op een vergelijkbare manier en beperken de resultaten tot het type socket dat op de opdrachtregel is opgegeven. Hier is de-u (UDP) optie in gebruik:
netstat -au | less
alleen UDP sockets worden weergegeven.
Sockets weergeven op Status
om de sockets te zien die zich in de luister-of Wachttoestand bevinden, gebruikt u de optie-l
(luisteren).
netstat -l | less
de sockets die worden weergegeven zijn de sockets die in de luistertoestand zijn.,
Dit kan worden gecombineerd met de opties-t (TCP, -u (UDP) en-x (UNIX) om verder in te gaan op de sockets van belang. Laten we kijken naar luisteren TCP sockets:
netstat -lt | less
nu zien we alleen TCP luisteren sockets.
netwerkstatistieken volgens Protocol
netstat -st | less
een verzameling statistieken voor de TCP-verbindingen wordt weergegeven in less
.
het tonen van procesnamen en PID ‘ s
het kan nuttig zijn om de process ID (PID) van het proces te zien met behulp van een socket, samen met de naam van dat proces., De -p
(programma) optie doet precies dat. Laten we eens kijken wat de PID ‘ s en procesnamen zijn voor de processen die een TCP socket gebruiken die in de luistertoestand is. We gebruiken sudo
om ervoor te zorgen dat we alle beschikbare informatie ontvangen, inclusief alle informatie waarvoor normaal root rechten nodig zijn.
sudo netstat -p -at
Hier is die uitvoer in een opgemaakte tabel:
we hebben een extra kolom genaamd ” PID/programmanaam.”Deze kolom toont de PID en de naam van het proces met behulp van elk van de sockets.,
numerieke adressen weergeven
een andere stap die we kunnen nemen om enige ambiguïteit te verwijderen is het weergeven van de lokale en externe adressen als IP-adressen in plaats van hun opgeloste domein en hostnamen. Als we de optie -n
(numeriek) gebruiken, worden de IPv4-adressen weergegeven in gestippeld-decimaal formaat:
sudo netstat -an | less
De IP-adressen worden weergegeven als numerieke waarden. De poortnummers worden ook getoond, gescheiden door een dubbele punt ” :
” van het IP-adres.
een IP-adres van 127.0.0.,1 laat zien dat de socket is gebonden aan het loopback-adres van de lokale computer. U kunt denken aan een IP-adres van 0.0.0.0 als de “standaard route” voor lokale adressen, en “elk IP-adres” voor buitenlandse adressen. IPv6-adressen weergegeven als “::
” zijn ook alle nul-adressen.
de poorten die worden weergegeven kunnen eenvoudig worden gecontroleerd om te zien wat hun gebruikelijke doel is:
- 22: Dit is de Secure Shell (SSH) luisterpoort.
- 25: Dit is de Simple Mail Transfer Protocol (SMTP) luisterpoort.
- 53: Dit is de DNS-luisterport (Domain Name System).,
- 68: Dit is de DHCP (Dynamic Host Configuration Protocol) luisterpoort.
- 631: dit is de gemeenschappelijke UNIX Printing System (CUPS) luisterpoort.
gerelateerd: Wat is het verschil tussen 127.0.0.1 en 0.0.0.0?
de routeringstabel
De optie -r
(route) toont de kernel routeringstabel.,
sudo netstat -r
Hier is die uitvoer in een nette tabel:
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
en, hier is wat de kolommen betekenen:
- bestemming: het bestemmingsnetwerk of bestemmingshostapparaat (als de bestemming geen netwerk is).
- Gateway: het gateway-adres. Een sterretje “
*
” verschijnt hier als er geen gateway-adres is ingesteld. - Genmasker: het subnetmasker voor de route.
- vlaggen: zie onderstaande tabel vlaggen.,
- MSS: standaard maximale segmentgrootte voor TCP-verbindingen over deze route—Dit is de grootste hoeveelheid gegevens die in één TCP-segment kan worden ontvangen.
- venster: de standaard venstergrootte voor TCP-verbindingen over deze route, wat het aantal pakketten aangeeft dat kan worden overgedragen en ontvangen voordat de ontvangende buffer vol is. In de praktijk worden de pakketten verbruikt door de ontvangende applicatie.
- irtt: de initiële retourtijd. Deze waarde wordt door de kernel gebruikt om dynamische aanpassingen te maken aan TCP-parameters voor externe verbindingen die traag reageren.,
- Iface: de netwerkinterface van waaruit de pakketten die over deze route worden verzonden, worden verzonden.
de waarde van de vlaggen kan één zijn van:
- U: de route is omhoog.
- H: doel is een host en de enige bestemming die mogelijk is op deze route.
- G: gebruik de gateway.
- R: herstel de route voor dynamische routering.
- D: dynamisch geïnstalleerd door de routeringsdaemon.
- M: gewijzigd door de routeringsdaemon toen deze een ICMP-pakket (Internet Control Message Protocol) ontving.,
- A: geïnstalleerd door
addrconf
, de geautomatiseerde DNS-en DHCP-configuratiebestandgenerator. - C: cache-item.
- !: Weiger route.
het vinden van de poort die gebruikt wordt door een proces
als we de uitvoer van netstat
doorsluizen naar grep
, kunnen we zoeken naar een proces op naam en de poort identificeren die het gebruikt. We gebruiken de -a
(all), -n
(numeriek) en -p
(programma) opties die eerder werden gebruikt, en zoeken naar “sshd.,”
sudo netstat -anp | grep "sshd"
grep
vindt de doeltekst, en we zien dat de sshd
daemon poort 22 gebruikt.
natuurlijk kunnen we dit ook in omgekeerde volgorde doen. Als we zoeken naar”: 22″, kunnen we uitzoeken welk proces die poort gebruikt, als die er is.
sudo netstat -anp | grep ":22"
Deze keer grep
vindt de”: 22″doelstring, en we zien dat het proces dat deze poort gebruikt de sshd
daemon is, proces ID 751.,
Toon de netwerkinterfaces
de optie -i
(interfaces) geeft een tabel weer van de netwerkinterfaces die netstat
kan ontdekken.
sudo netstat -i
Hier is de uitvoer beter leesbaar:
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
Dit is wat de kolommen betekenen:
- Iface: de naam van de interface. De
enp0s3
interface is de netwerkinterface naar de buitenwereld, en delo
interface is de loopback interface., Met de loopback-interface kunnen processen binnen de computer met elkaar communiceren via netwerkprotocollen, zelfs als de computer niet is aangesloten op een netwerk. - MTU: de maximale Transmissieeenheid (MTU). Dit is het grootste “pakket” dat kan worden verzonden. Het bestaat uit een header met Routering en protocol vlaggen, en andere metadata, plus de gegevens die daadwerkelijk worden getransporteerd.
- RX-OK: het aantal ontvangen pakketten, zonder fouten.
- RX-ERR: het aantal ontvangen pakketten, met fouten. We willen dat dit zo laag mogelijk is.,
- RX-DRP: het aantal verloren pakketten. We willen ook dat dit zo laag mogelijk is.
- RX-OVR: aantal verloren pakketten als gevolg van overflows bij het ontvangen. Dit betekent gewoonlijk dat de ontvangende buffer volledig was en geen meer gegevens kon goedkeuren, maar meer gegevens werden ontvangen en moesten worden verworpen. Hoe lager dit cijfer, hoe beter, en nul is perfect.
- TX-OK: het aantal verzonden pakketten, zonder fouten.
- RX-ERR: het aantal verzonden pakketten, met fouten. We willen dat dit nul is.,
- RX-DRP: het aantal pakketten daalde tijdens het verzenden. Idealiter zou dit nul moeten zijn.
- RX-OVR: het aantal verloren pakketten als gevolg van overflows bij het verzenden. Dit betekent meestal dat de verzendbuffer vol was en niet meer gegevens kon accepteren, maar meer gegevens waren klaar om te worden verzonden en moesten worden weggegooid.
- Flg: vlaggen. Zie de vlaggen tabel hieronder.
De vlaggen staan voor het volgende:
lijst Multicast-groepslidmaatschappen
simpel gezegd, een multicast-transmissie maakt het mogelijk een pakket slechts één keer te verzenden, ongeacht het aantal ontvangers., Voor diensten zoals videostreaming, bijvoorbeeld, verhoogt dit de efficiëntie vanuit het oogpunt van de afzender met een enorme hoeveelheid.
de -g
(groups) optie maakt netstat
een lijst van de multicast groep lidmaatschap van sockets op elke interface.
sudo netstat -g
de kolommen zijn vrij eenvoudig:
- Interface: de naam van de interface waarover de socket verzendt.
- RefCnt: het referentieaantal, dat het aantal processen is dat aan de socket is gekoppeld.,
- groep: de naam of identifier van de multicastgroep.
De Nieuwe Kids op het blok
de commando ‘ s route, ip, ifconfig en ss kunnen veel geven van wat netstat
U kan laten zien. Het zijn allemaal geweldige commando ‘ s en het bekijken waard.
we hebben ons gericht op netstat
omdat het universeel beschikbaar is, ongeacht aan welk Unix-achtig besturingssysteem u werkt, zelfs de obscure.,