Der Implementierungsprozess der Linux-Prozessnetzwerkverkehrsstatistik

Der Implementierungsprozess der Linux-Prozessnetzwerkverkehrsstatistik

Vorwort

Linux verfügt über entsprechende Open-Source-Tools, um Netzwerkverbindungen, Prozesse und andere Informationen in Echtzeit zu erfassen. Die Netzwerkverbindung umfasst im Allgemeinen die grundlegendsten Fünf-Tupel-Informationen (Quelladresse, Zieladresse, Quellport, Zielport, Protokollnummer) sowie die Prozessinformationen (PID, EXE, Befehlszeile) usw. Die meisten dieser beiden Daten können direkt aus den Netzwerkstatus-Verbindungsdateien (/proc/net/tcp, /proc/net/udp) im Linux-Verzeichnis /proc und dem Prozessstatusverzeichnis (/proc/pid/xx) gelesen werden.

In einigen Anwendungssicherheitsszenarien ist es erforderlich, Daten wie Prozessnetzwerkverbindungen, eingehenden und ausgehenden Datenverkehr zu kombinieren, um zu analysieren, ob im Intranet böswillige Übertragungen vertraulicher Daten stattfinden. Bei der Netzwerküberwachung wird festgestellt, dass eine große Menge an Serverbandbreite belegt ist, aber es ist nicht klar, welcher spezifische Prozess im System diese belegt. Hierzu ist es erforderlich, detailliertere Netzwerkverkehrsdaten auf Prozessebene zu erhalten, um eine umfassende Analyse zu ermöglichen.

Netzwerkdaten auf Hostebene finden Sie im Linux-Proc-Verzeichnis. Beispielsweise bietet /proc/net/snmp detaillierte Daten zu den IP-, ICMP-, ICMPMsg-, TCP- und UDP-Ebenen des Hosts. Die Felder InBcastPkts, OutBcastPkts, InOctets und OutOctets in der Datei /proc/net/netstat geben die Anzahl der gesendeten und empfangenen Pakete sowie die Byte-Daten der empfangenen Pakete an. Leider sind keine Daten zum ein- und ausgehenden Netzwerkverkehr auf Prozessebene vorhanden.

Zu diesem Zweck verwenden wir das Nethog-Prinzip, um eine Methode zur Zählung des Netzwerkverkehrs auf Prozessebene zu implementieren.

Basisdaten

Die folgenden Verzeichnisse oder Dateien sind betroffen: Netzwerkstatusdateien /proc/net/tcp, /proc/net/udp und Prozessdateideskriptorverzeichnis /proc/pid/fd.

Netzwerkstatusdatei /proc/net/tcp

Wir konzentrieren uns auf das 5-Tupel + Status + Inode-Nummer in der 2., 3., 4. und 11. Spalte.

Die 23. Spalte ist die Host-Byte-Reihenfolge IP:Port, zum Beispiel "0500000A:0016" -> "10.0.0.5", 22

Die 4. Spalte enthält die Statusinformationen. Die Bedeutung des Statusfeldes ist wie folgt:

„01“: „HERGESTELLT“,
„02″: „SYN_SENT“,
„03″: „SYN_RECV“,
„04“: „FIN_WAIT1“,
„05“: „FIN_WAIT2“,
„06″: „WAIT_ZEIT“,
„07″: „SCHLIESSEN“,
„08“: „CLOSE_WAIT“,
„09″: „LAST_ACK“,
„0A“: „HÖREN“,
„0B“: „SCHLIESST“

Die 11. Spalte ist die Inode-Nummer eines Dateisystemobjekts im Linux-Systemdateisystem, einschließlich Metadaten von Dateien, Verzeichnissen, Gerätedateien, Sockets, Pipes usw.


Prozessdateideskriptoren

Das Verzeichnis /proc/pid/fd listet die vom aktuellen Prozess geöffneten Dateiinformationen auf, wobei 0, 1 und 2 für Standardeingabe, -ausgabe und -fehler stehen.

Die Netzwerkverbindung ist ein Dateideskriptor, der mit „socket:“ beginnt, wobei die Inode-Nummer in Klammern [] steht, die der Inode-Nummer in der Netzwerkstatusdatei /proc/net/tcp entspricht.

Am Beispiel des Prozesses pid:25133 lauten die Dateideskriptoren 10 und 12 und die entsprechenden Inode-Nummern sind 512505532 bzw. 512473483. Gleichzeitig finden Sie in der folgenden Abbildung detaillierte Informationen zu den entsprechenden Verbindungen in /proc/net/tcp.

Basierend auf den obigen Dateiinformationen kann eine Zuordnung der Netzwerkverbindung Quintupel -> Inode von /proc/net/tcp aus hergestellt werden, während eine Zuordnung der Verbindung Inode -> Prozess von /proc/pid/fd aus hergestellt werden kann.

Auf diese Weise wird die Inode-Nummer als Brücke verwendet, um die Prozesse im System mit den Netzwerkverbindungsinformationen zu verknüpfen.

Implementierungsprozess

Um den Netzwerkverbindungsverkehr in Echtzeit abzurufen, wird auf dem Linux-Host die Open-Source-Bibliothek libpcap zum Erfassen von Netzwerkpaketen verwendet. Nachfolgend sehen Sie das vollständige Implementierungsflussdiagramm, das die folgenden fünf Schlüsselschritte umfasst.

Paketerfassung

Verwenden Sie die Libpcap-Bibliothek, um die Netzwerkpaketstruktur zu erhalten.

Analysieren der Nachricht

Analysieren Sie die Fünf-Tupel-Informationen (Quelladresse, Zieladresse, Quellport, Zielport, Protokollnummer) des Pakets und die Verkehrsgröße des aktuellen Pakets.

Cache-Aktualisierungen

Suchen Sie nach der Inode-Nummer, die dem Schlüssel entspricht, der aus dem Fünfer-Tupel in ConnInodeHash besteht. Wenn sie nicht existiert, lesen Sie /proc/net/tcp und udp erneut, aktualisieren Sie den ConnInodeHash-Cache, stellen Sie die Zuordnung zwischen der Verbindung und dem Inode her und lesen Sie das Verzeichnis /proc/pid/fd erneut, um alle Dateideskriptoren zu durchlaufen und die Verbindungen herauszufiltern, die mit socket: beginnen. Aktualisieren Sie den InodeProcessHash-Cache und stellen Sie die Zuordnung zwischen dem Inode und dem Prozess erneut her.

Hash-Suche

Suchen Sie anhand der gefundenen Inode-Nummer die entsprechende Prozess-PID in InodeProcessHash.

Verkehrsstatistiken

Anhand der Nachrichtenadresse wird die Netzwerkverbindungsrichtung bestimmt und die Zufluss- und Abflussdaten des Prozesses akkumuliert.

Zusammenfassen

Erfassen Sie Pakete auf Linux-Hosts und implementieren Sie eine feinkörnige Methode zur Erfassung des Netzwerkverkehrs auf Prozessebene, indem Sie Netzwerkstatusdateien und Prozessdateideskriptoren kombinieren.

Durch die Verwendung der Linux-Datei-Inode-Nummer als Brücke kann die Beziehung zwischen dem Prozess und der Netzwerkverbindung verknüpft werden. Der Gesamtbetrag/Durchschnittswert des empfangenen/gesendeten Prozesses und andere Dimensionsdaten können gezählt werden, und die Verkehrsdaten jeder Netzwerkverbindung des Prozesses können ebenfalls analysiert werden. Diese können als wichtige Grundlage für die Analyse der Host-Verkehrssicherheit, die Netzwerküberwachung und Fehlerbehebung und andere Szenarien dienen. Es sollte jedoch auch beachtet werden, dass das kontinuierliche Erfassen von Paketen durch libpcap sich nachteilig auf die Hostleistung auswirkt.

Oben ist der vom Herausgeber vorgestellte Implementierungsprozess der Netzwerkverkehrsstatistik für Linux-Prozesse. Ich hoffe, er ist für alle hilfreich. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

<<:  Ubuntu 15.04 öffnet den MySQL-Remote-Port 3306

>>:  Detaillierte Schritte für Navicat zur Remote-Verbindung mit SQL Server und zur Konvertierung nach MySQL

Artikel empfehlen

So implementieren Sie eine einfache Datenüberwachung mit JS

Inhaltsverzeichnis Überblick erster Schritt Schri...

jQuery Treeview-Baumstrukturanwendung

In diesem Artikelbeispiel wird der Anwendungscode...

Schritte zur Methode „Mysql-Abfragedatenbankkapazität“

Abfrage der Gesamtgröße aller Datenbanken So geht...

JavaScript zum Erzielen digitaler Uhreffekte

In diesem Artikelbeispiel wird der spezifische Co...

DHTML-Objekte (gemeinsame Eigenschaften verschiedener HTML-Objekte)

!DOCTYPE Gibt die Document Type Definition (DTD) ...

Detaillierte Erläuterung des MySQL InnoDB-Sekundärindex-Sortierbeispiels

Sortierproblem Ich habe kürzlich auf Geek Time „4...

So löschen Sie die Hintergrundfarbe des A-Tags, wenn in H5 darauf geklickt wird

1. Die blaue Farbe des Tags wird aufgehoben, wenn...

Details zu MySQL-Zeittypen und -Modi

Inhaltsverzeichnis 1. MySQL-Zeittyp 2. Überprüfen...

So installieren Sie Tomcat8 im Docker

1. Installieren Sie Tomcat8 mit Docker 1. Suchen ...

Eine kurze Diskussion über die Lebenszyklusfunktionen von React Component

Was sind die Lebenszyklusfunktionen von React-Kom...

MySQL5.6.31 winx64.zip Installations- und Konfigurationstutorial

#1. Herunterladen # #2. Entpacken Sie die Datei l...