- Dave McKay
@TheGurkha
- Februar, 17, 2020, 8:00am EDT
Linux netstat
Befehl haben Sie eine Fundgrube von Informationen über Ihre Netzwerk-verbindungen, die ports, die verwendet werden, und die Prozesse, die Sie verwenden. Erfahren Sie, wie es zu benutzen.
Ports, Prozesse und Protokolle
Netzwerksockets können entweder verbunden werden oder auf eine Verbindung warten., Die Verbindungen verwenden Netzwerkprotokolle wie Transport Control Protocol (TCP) oder User Datagram Protocol UDP. Sie verwenden Internetprotokolladressen und Netzwerkports, um Verbindungen herzustellen.
Das Wort Sockets könnte Bilder eines physischen Verbindungspunkts für eine Leitung oder ein Kabel heraufbeschwören, aber in diesem Zusammenhang ist ein Socket ein Softwarekonstrukt, das verwendet wird, um ein Ende einer Netzwerkdatenverbindung zu behandeln.,
Sockets haben zwei Hauptzustände: Sie sind entweder verbunden und ermöglichen eine laufende Netzwerkkommunikation, oder sie warten auf eine eingehende Verbindung zu ihnen zu verbinden. Es gibt andere Zustände, z. B. den Zustand, in dem sich ein Socket auf halbem Weg zum Herstellen einer Verbindung auf einem Remote-Gerät befindet, aber wenn Sie vorübergehende Zustände beiseite legen, können Sie sich vorstellen, dass ein Socket entweder verbunden ist oder wartet (was oft als Abhören bezeichnet wird).
Der Listening-Socket wird als Server bezeichnet, und der Socket, der eine Verbindung mit dem Listening-Socket anfordert, wird als Client bezeichnet., Diese Namen haben nichts mit Hardware – oder Computerrollen zu tun. Sie definieren einfach die Rolle jedes Sockets an jedem Ende der Verbindung.
Mit dem Befehl netstat
können Sie ermitteln, welche Sockets verbunden sind und welche Sockets abhören. Das heißt, es sagt Ihnen, welche Ports verwendet werden und welche Prozesse sie verwenden. Es kann Ihnen Routing-Tabellen und Statistiken über Ihre Netzwerkschnittstellen und Multicast-Verbindungen zeigen.
Die Funktionalität von netstat
wurde im Laufe der Zeit in verschiedenen Linux-Dienstprogrammen wie ip und ss repliziert., Es lohnt sich immer noch, diesen Opa aller Netzwerkanalysebefehle zu kennen, da er auf allen Linux-und Unix-ähnlichen Betriebssystemen sowie sogar auf Windows und Mac verfügbar ist.
So verwenden Sie es, komplett mit Beispielbefehlen.
Auflistung aller Sockets
Die-a
(all) Option machtnetstat
alle angeschlossenen und wartenden Sockets anzeigen. Dieser Befehl kann zu einer langen Liste führen, daher leiten wir ihn in less
.,
netstat -a | less
Die Auflistung umfasst TCP (IP), TCP6 (IPv6) und UDP-Sockets.
Der Wrap-around im Terminalfenster macht es ein wenig schwierig zu sehen, was los ist. Hier sind einige Abschnitte aus dieser Liste:
Der Abschnitt „Aktives Internet“ listet die verbundenen externen Verbindungen und lokalen Sockets auf, die auf Remoteverbindungsanfragen warten. Das heißt, es listet die Netzwerkverbindungen auf, die zu externen Geräten hergestellt werden (oder werden).,
Im Abschnitt „UNIX-Domäne“ werden die verbundenen und abhörenden internen Verbindungen aufgelistet. Mit anderen Worten, es listet die Verbindungen auf, die innerhalb Ihres Computers zwischen verschiedenen Anwendungen, Prozessen und Elementen des Betriebssystems hergestellt wurden.
Die Spalten „Aktives Internet“ sind:
- Proto: Das von diesem Socket verwendete Protokoll (z. B. TCP oder UDP).
- Recv-Q: Die Empfangswarteschlange. Dies sind eingehende Bytes, die empfangen wurden und gepuffert werden und auf den lokalen Prozess warten, der diese Verbindung zum Lesen und Verbrauchen verwendet.,
- Send-Q: Die Sendewarteschlange. Dies zeigt die Bytes an, die bereit sind, aus der Sendewarteschlange gesendet zu werden.
- Lokale Adresse: Die Adressdetails des lokalen Endes der Verbindung. Der Standardwert ist für
netstat
, um den lokalen Hostnamen für die Adresse und den Namen des Dienstes für den Port anzuzeigen. - Fremdadresse: Die Adresse und Portnummer des entfernten Endes der Verbindung.
- State: Der Status des lokalen Sockets. Bei UDP-Sockets ist dies normalerweise leer. Siehe die staatliche Tabelle unten.,
Bei TCP-Verbindungen kann der Statuswert einer der folgenden sein:
- LISTEN: Nur serverseitig. Der socket wartet auf eine Verbindungsanforderung.
- SYN-SENT: Nur clientseitig. Dieser Socket hat eine Verbindungsanforderung gestellt und wartet darauf, ob er akzeptiert wird.
- SYN-RECEIVED: Nur serverseitig. Dieser Socket wartet auf eine Verbindungsbestätigung, nachdem er eine Verbindungsanforderung akzeptiert hat.
- ETABLIERT: Server und Clients. Es wurde eine funktionierende Verbindung zwischen dem Server und dem Client hergestellt, sodass Daten zwischen beiden übertragen werden können.,
- FIN-WAIT-1: Server und clients. Dieser Socket wartet auf eine Verbindungsabschlussanforderung vom Remote-Socket oder auf eine Bestätigung einer Verbindungsabschlussanforderung, die zuvor von diesem Socket gesendet wurde.
- FIN-WAIT-2: Server und clients. Dieser Socket wartet auf eine Verbindungsabschlussanforderung vom Remote-Socket.
- CLOSE-WAIT: Server und client. Dieser Socket wartet auf eine Verbindungsabschlussanforderung des lokalen Benutzers.
- SCHLIEßEN: Server und Clients., Dieser Socket wartet auf eine Bestätigung der Verbindungsabschlussanforderung vom Remote-Socket.
- LAST-ACK: Server und client. Dieser Socket wartet auf eine Bestätigung der Verbindungsabschlussanforderung, die er an den Remote-Socket gesendet hat.
- TIME-WAIT: Server und clients. Dieser Socket hat eine Bestätigung an den Remote-Socket gesendet, um ihm mitzuteilen, dass er die Beendigungsanforderung des Remote-Sockets erhalten hat. Es wartet nun darauf, dass die Bestätigung eingegangen ist.
- GESCHLOSSEN: Es gibt keine Verbindung, daher wurde der Socket beendet.,
Die Spalten „Unix domain“ sind:
- Proto: Das von diesem Socket verwendete Protokoll. Es wird „unix.“
- RefCnt: Referenz Anzahl. Die Anzahl der an diesen Socket angeschlossenen Prozesse.
- Flags: Dies wird normalerweise auf
ACC
gesetzt , wasSO_ACCEPTON
, was bedeutet, dass der Socket auf eine Verbindungsanforderung wartet.SO_WAITDATA
, dargestellt alsW
, bedeutet, dass Daten darauf warten, gelesen zu werden.,SO_NOSPACE
, dargestellt alsN
, bedeutet, dass kein Platz zum Schreiben von Daten in den Socket vorhanden ist (dh der Sendepuffer ist voll). - Typ: Der socket-Typ. Siehe die Tabelle Typ unten.
- – Zustand: Der Zustand des Sockets. Siehe die Zustandstabelle unten.
- I-Node: Der Dateisystem-Inode, der diesem Socket zugeordnet ist.
- Pfad: Der Dateisystempfad zum Socket.
Der Unix-Domänensocket-Typ kann einer der folgenden sein:
- DGRAM: Der Socket wird im Datagrammmodus mit Nachrichten fester Länge verwendet., Datagramme sind weder zuverlässig, sequenziert noch undupliziert garantiert.
- STREAM: Dieser Socket ist ein Stream-Socket. Dies ist die alltägliche“ normale “ Art der Socket-Verbindung. Diese Sockets sind so konzipiert, dass sie eine zuverlässige sequenzierte (In-Order) Zustellung von Paketen ermöglichen.
- RAW: Dieser Socket wird als Raw-Socket verwendet. Raw-Sockets arbeiten auf Netzwerkebene des OSI-Modells und verweisen nicht auf TCP-und UDP-Header von der Transportebene.
- RDM: Dieser Socket befindet sich an einem Ende einer zuverlässig gelieferten Nachrichtenverbindung.,
- SEQPACKET: Dieser Socket fungiert als sequentieller Paketsocket, der eine weitere Möglichkeit zur zuverlässigen, sequenzierten und unduplizierten Paketzustellung darstellt.
- PAKET: Raw-Anschluss-Buchse. Paket-Sockets werden zum Empfangen oder Senden von Rohpaketen auf Gerätetreiber-Ebene (d. H. Datenverbindungsschicht) des OSI-Modells verwendet.
Der Unix-Domain-Socket-Status kann einer der folgenden sein:
- FREE: Dieser Socket ist nicht zugewiesen.
- LISTENING: Dieser Socket wartet auf eingehende Verbindungsanfragen.,
- VERBINDEN: Diese buchse ist in den prozess der verbindung.
- VERBUNDEN: Es wurde eine Verbindung hergestellt, und der Socket kann Daten empfangen und übertragen.
- TRENNEN: Die Verbindung wird gerade beendet.
Wow, das sind viele Informationen! Viele dernetstat
Optionen verfeinern die Ergebnisse auf die eine oder andere Weise, aber sie ändern den Inhalt nicht zu sehr. Schauen wir mal.,
Auflisten von Sockets nach Typ
Der Befehl netstat -a
kann mehr Informationen bereitstellen, als Sie sehen müssen. Wenn Sie nur die TCP-Sockets sehen möchten oder müssen, können Sie die Option -t
(TCP) verwenden, um die Anzeige so zu beschränken, dass nur TCP-Sockets angezeigt werden.
netstat -at | less
Die Darstellung ist stark reduziert. Die wenigen aufgelisteten Sockets sind alle TCP-Sockets.,
Die Optionen -u
(UDP) und -x
(UNIX) verhalten sich ähnlich und beschränken die Ergebnisse auf den in der Befehlszeile angegebenen Socket-Typ. Hier ist die verwendete Option-u (UDP):
netstat -au | less
Es werden nur UDP-Sockets aufgelistet.
Sockets nach Status auflisten
Um die Sockets anzuzeigen, die sich im Listening-oder Waiting-Status befinden, verwenden Sie die Option -l
(listening).
netstat -l | less
Die aufgelisteten Sockets befinden sich im Listenzustand.,
Dies kann mit den Optionen-t (TCP, -u (UDP) und-x (UNIX) kombiniert werden, um die gewünschten Sockets weiter zu verwenden. Suchen wir nach abhörenden TCP-Sockets:
netstat -lt | less
Jetzt sehen wir nur TCP-Abhörsockets.
Netzwerkstatistik nach Protokoll
Eine Sammlung von Statistiken für die TCP-Verbindungen wird inless
angezeigt.
Prozessnamen und PIDs anzeigen
Es kann nützlich sein, die Prozess-ID (PID) des Prozesses mithilfe eines Sockets zusammen mit dem Namen dieses Prozesses anzuzeigen., -p
(Programm) – option macht genau das. Mal sehen, was die PIDs und Prozessnamen für die Prozesse sind, die einen TCP-Socket verwenden, der sich im Listening-Status befindet. Wir verwenden sudo
um sicherzustellen, dass wir alle verfügbaren Informationen erhalten, einschließlich aller Informationen, für die normalerweise Root-Berechtigungen erforderlich sind.
sudo netstat -p -at
Hier ist die Ausgabe in einer formatierten Tabelle:
Wir haben eine zusätzliche Spalte namens “ PID/program name.“Diese Spalte listet die PID und den Namen des Prozesses mit jedem der Sockets auf.,
Numerische Adressen auflisten
Ein weiterer Schritt, um einige Mehrdeutigkeiten zu beseitigen, besteht darin, die lokalen und Remote-Adressen als IP-Adressen anstelle ihrer aufgelösten Domänen-und Hostnamen anzuzeigen. Wenn wir die Option -n
(numerisch) verwenden, werden die IPv4-Adressen im gepunkteten Dezimalformat angezeigt:
sudo netstat -an | less
Die IP-Adressen werden als numerische Werte angezeigt. Die Portnummern werden ebenfalls angezeigt, getrennt durch einen Doppelpunkt „:
“ von der IP-Adresse.
Eine IP-Adresse von 127.0.0.,1 zeigt, dass der Socket an die Loopback-Adresse des lokalen Computers gebunden ist. Sie können sich eine IP-Adresse von 0.0.0.0 als „Standardroute“ für lokale Adressen und „beliebige IP-Adresse“ für ausländische Adressen vorstellen. IPv6-Adressen, die als „::
“ angezeigt werden, sind ebenfalls alle Nulladressen.
Die aufgelisteten Ports können leicht überprüft werden, um zu sehen, was ihr üblicher Zweck ist:
- 22: Dies ist der Secure Shell (SSH) Listening Port.
- 25: Das Simple Mail Transfer Protocol (SMTP) – listening-port.
- 53: Dies ist der DNS-Listening-Port (Domain Name System).,
- 68: Dies ist der DHCP-Abhörport (Dynamic Host Configuration Protocol).
- 631: Dies ist die Gemeinsame UNIX Printing System (CUPS) hören port.
VERWANDTE: Was ist der Unterschied Zwischen 127.0.0.1 und 0.0.0.0?
Anzeigen der Routing-Tabelle
Die Option -r
(route) zeigt die Kernel-Routing-Tabelle an.,
sudo netstat -r
Hier ist die Ausgabe in einer übersichtlichen Tabelle:
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
Und hier bedeuten die Spalten:
- Ziel: Das Zielnetzwerk oder das Zielhostgerät (wenn das Ziel kein Netzwerk ist).
- Gateway: Die gateway-Adresse ein. Ein Sternchen“
*
“ erscheint hier, wenn keine Gateway-Adresse gesetzt ist. - Genmask: Die Subnetzmaske für die route ein.
- Flags: Siehe die Flags-Tabelle unten.,
- MSS: Standardmäßige maximale Segmentgröße für TCP-Verbindungen über diese Route—dies ist die größte Datenmenge, die in einem TCP-Segment empfangen werden kann.
- Fenster: Die Standardfenstergröße für TCP-Verbindungen über diese Route, die die Anzahl der Pakete angibt, die übertragen und empfangen werden können, bevor der Empfangspuffer voll ist. In der Praxis werden die Pakete von der empfangenden Anwendung verbraucht.
- irtt: Die anfängliche Hin-und Rückfahrtzeit. Dieser Wert wird vom Kernel referenziert, um dynamische Anpassungen an TCP-Parametern für Remoteverbindungen vorzunehmen, die langsam reagieren.,
- Iface: Die Netzwerkschnittstelle, von der die über diese Route gesendeten Pakete übertragen werden.
Der Flags-Wert kann einer von sein:
- U: Die Route ist nach oben.
- H: Ziel ist ein Host und das einzige Ziel, das auf dieser Route möglich ist.
- G: Verwenden Sie das Gateway.
- R: Setzen Sie die Route für dynamisches Routing wieder ein.
- D: Dynamisch vom Routing-Daemon installiert.
- M: Vom Routing-Daemon geändert, wenn er ein ICMP-Paket (Internet Control Message Protocol) empfangen hat.,
- A: Installiert durch
addrconf
, die automatische DNS-und DHCP-config-Datei-generator. - C: Cache-Eintrag.
- !: Ablehnen der route.
Ermitteln des von einem Prozess verwendeten Ports
Wenn wir die Ausgabe von netstat
durch grep
leiten, können wir nach einem Prozess nach Namen suchen und den verwendeten Port identifizieren. Wir verwenden die Optionen -a
(alle), -n
(numerisch) und -p
(Programm) und suchen nach „sshd.,“
sudo netstat -anp | grep "sshd"
grep
findet die Zielzeichenfolge und wir sehen, dass der sshd
– Daemon Port 22 verwendet.
Natürlich können wir das auch umgekehrt machen. Wenn wir nach „:22 “ suchen, können wir herausfinden, welcher Prozess diesen Port verwendet, falls vorhanden.
sudo netstat -anp | grep ":22"
Dieses Mal findet grep
die Zielzeichenfolge“: 22″, und wir sehen, dass der Prozess, der diesen Port verwendet, der sshd
– Daemon ist, Prozess-ID 751.,
Liste der Netzwerkschnittstellen
Die Option -i
(interfaces) zeigt eine Tabelle der Netzwerkschnittstellen an, die netstat
entdecken kann.
sudo netstat -i
Hier ist die Ausgabe lesbarer:
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
Dies bedeuten die Spalten:
- Iface: Der Name der Schnittstelle. Die
enp0s3
– Schnittstelle ist die Netzwerkschnittstelle zur Außenwelt, und dielo
– Schnittstelle ist die Loopback-Schnittstelle., Die Loopback-Schnittstelle ermöglicht es Prozessen, innerhalb des Computers mithilfe von Netzwerkprotokollen zu kommunizieren, auch wenn der Computer nicht mit einem Netzwerk verbunden ist. - MTU: Die maximale Übertragungseinheit (MTU). Dies ist das größte „Paket“, das gesendet werden kann. Es besteht aus einem Header, der Routing-und Protokollflags sowie andere Metadaten sowie die tatsächlich transportierten Daten enthält.
- RX-OK: Die Anzahl der empfangenen Pakete ohne Fehler.
- RX-ERR: Die Zahl der empfangenen Pakete mit Fehlern. Wir wollen, dass dies so niedrig wie möglich ist.,
- RX-DRP: Die Anzahl der Pakete, die gelöscht wurden (dh verloren gingen). Wir wollen auch, dass dies so niedrig wie möglich ist.
- RX-OVR: Anzahl der Pakete, die durch Überläufe beim Empfang verloren gehen. Dies bedeutet normalerweise, dass der Empfangspuffer voll war und keine weiteren Daten akzeptieren konnte, aber mehr Daten empfangen wurden und verworfen werden mussten. Je niedriger diese Zahl, desto besser und Null ist perfekt.
- TX-OK: Die Anzahl der übertragenen Pakete ohne Fehler.
- RX-ERR: Die Anzahl der übertragenen Pakete, der mit Fehler. Wir wollen, dass das Null ist.,
- RX-DRP: Die Anzahl der Pakete, die beim Senden gelöscht wurden. Idealerweise sollte dies Null sein.
- RX-OVR: Die Anzahl der Pakete, die durch Überläufe beim Senden verloren gehen. Dies bedeutet normalerweise, dass der Sendepuffer voll war und keine weiteren Daten akzeptieren konnte, aber mehr Daten zur Übertragung bereit waren und verworfen werden mussten.
- Flg: Flags. Siehe die Flags-Tabelle unten.
Die Flags stellen Folgendes dar:
Liste der Multicast-Gruppenmitgliedschaften
Einfach ausgedrückt, eine Multicast-Übertragung ermöglicht es, ein Paket unabhängig von der Anzahl der Empfänger nur einmal zu senden., Für Dienste wie Videostreaming erhöht dies beispielsweise die Effizienz aus Sicht des Absenders um einen enormen Betrag.
Die-g
(Gruppen) Option machtnetstat
Liste der Multicast-Gruppenmitgliedschaft von Sockets auf jeder Schnittstelle.
sudo netstat -g
Die Spalten sind recht einfach:
- Schnittstelle: Der Name der Schnittstelle, über die der Socket sendet.
- RefCnt: Die Referenzanzahl, d. h. Die Anzahl der an den Socket angehängten Prozesse.,
- Gruppe: Der Name oder die Kennung der Multicastgruppe.
Die neuen Kinder im Block
Die Befehle route, ip, ifconfig und ss können viel von dem bieten, was netstat
Ihnen zeigen kann. Sie sind alle großartige Befehle und einen Besuch wert.
Wir haben uns auf netstat
konzentriert, da es universell verfügbar ist, unabhängig davon, an welchem Unix-ähnlichen Betriebssystem Sie arbeiten, auch an den obskuren.,
Dave McKay verwendete zuerst Computer, als gestanztes Papierband in Mode war, und er programmiert seitdem. Nach über 30 Jahren in der IT-Branche ist er nun Vollzeit-Technologiejournalist. Während seiner Karriere arbeitete er als freier Programmierer, Manager eines internationalen Softwareentwicklungsteams, IT-Projektmanager und zuletzt als Datenschutzbeauftragter. Dave ist ein Linux-evangelist-und open-source-Verfechter.Lesen Sie vollständige Bio “