Python referenziert Socket und Scapy, um Stabilitätstests zu implementieren

Vorwort

Beim täglichen Testen ist der Stabilitätstest ein wesentlicher Link, es ist jedoch schwierig, reale Kundenszenarien zu simulieren. Darüber hinaus werden nach Beginn des Stabilitätstests nur sehr wenige Ausführungsdaten erfasst, sodass wir die Socket-in-Ptyhon-Bibliothek und die Scapy-Bibliothek kombinieren. Um Stabilitätstests zu erreichen, sind zufälliges EPS, Intervall-EPS-Auftrittswahrscheinlichkeit, festgelegte Ausführungszeit, simulierte Quell-IP und angegebene Ziel-IP alle konfigurierbar und haben die Funktion, Protokolle zu drucken.

Socket und Scapy

Beide werden zum Übertragen von Daten verwendet. Wir verwenden sie hauptsächlich zum Übertragen von Nachrichten, die in Form von TCP und UDP übertragen werden können. Bei der TCP-Übertragung werden Byteströme verwendet, und bei UDP handelt es sich um Datenpakete. Daher werden zwei Übertragungen verwendet. Es gibt auch einige Unterschiede in der Art und Weise, wie auf den Code verwiesen wird.

Sockeleigenschaften

Python bietet zwei grundlegende Socket-Module: Das erste ist Socket, das die Standard-BSD-Sockets-API bereitstellt, und das zweite ist SocketServer, das die Server-Center-Klasse bereitstellt, die die Entwicklung von Netzwerkservern vereinfachen kann. Wenn TCP Daten sendet, wird die TCP-Verbindung hergestellt wurde eingerichtet, daher ist die Angabe der Adresse nicht erforderlich. UDP ist verbindungsorientiert und jedes Mal, wenn Sie es senden, müssen Sie angeben, an wen es gesendet wird.

Scapy-Funktionen

Scapy umfasst Techniken wie pf_packet-Socket-Programmierung, Routing und objektorientiertes Design und ist in Python geschrieben. Im Allgemeinen muss der Empfang von Nachrichten bestimmte Protokolle einhalten, damit beide Parteien Daten durch bestimmte Klebe- und Entpackvorgänge verarbeiten können. In vielen Fällen sind benutzerdefinierte Protokolle relativ einfach: Empfangen Sie zuerst den Nachrichtenheader, ermitteln Sie die Nachrichtenlänge und dann Holen Sie sich den Nachrichtentext. Da es jedoch viele Protokolle gibt, deren Schreiben umständlich ist, wird die Scapy-Bibliothek verwendet, um jeweils eine Nachricht abzurufen. Im Allgemeinen sind die Header-Informationen der Nachricht ähnlich, mit Quelladresse, Zieladresse usw Nachrichtenlänge.

Modulzusammensetzung

Das Timer-Modul wird verwendet, um alle X Sekunden eine Funktion auszuführen

Fügen Sie hier eine Bildbeschreibung ein

Für die Eintrittswahrscheinlichkeit von EPS wird die Wahrscheinlichkeitsfunktion der Zufallsvariablen verwendet

Fügen Sie hier eine Bildbeschreibung ein

Dokumentation, die vom Modul readfile zum Lesen von Rohprotokollen verwendet wirdFügen Sie hier eine Bildbeschreibung ein

Die Sendefunktion wird verwendet, um beliebige Originalprotokolle nach dem Zufallsprinzip zu extrahieren und Datenpakete gemäß EPS zu senden

Fügen Sie hier eine Bildbeschreibung ein

Umsetzungsprozess

Variable setzen

Es können mehrere EPS-Intervalle festgelegt werden, zum Beispiel A, B und C. Der Wert der EPS-Auftrittswahrscheinlichkeitsliste muss drei sein und die Summe ist 100. Beim Ausführen des Skripts können nur die Variable und der Codebereich geändert werden muss nicht geändert werden. Der Dateipfad darf nicht leer sein.
Parse Die Dateifunktion liest die Datei Korrektur, bevor das gesamte Skript ausgeführt wird
. Interpretation der Variablen in der Abbildung unten: Die Laufzeit des Skripts beträgt 1.800.000 Sekunden und die EPS ist in zwei Intervalle unterteilt: 0-500 und 500-2000. Die Wahrscheinlichkeit für Zufallswerte im Intervall 0-500 beträgt 95 %, die Wahrscheinlichkeit für Zufallswerte im Intervall 2000 beträgt 5 %. Lesen Sie den Text Geben Sie in der Datei im Stammverzeichnis die IP des Empfängers als 10.176.63.31 an, geben Sie den Port des Empfängers als 514 an, initialisieren Sie die Gesamtzahl der Ausführungszeiten und die Anzahl der Intervallausführungszeiten und deklarieren Sie den Socket.
Fügen Sie hier eine Bildbeschreibung ein

Ausführungsmethode

Fügen Sie hier eine Bildbeschreibung ein

Protokolldruck

Das Druckprotokoll enthält: den Pfad der Datei, die Anzahl der Zeilen in der Datei, die Startzeit der Ausführung, die Anzahl der von EPS pro Sekunde gesendeten Daten und die Anzahl der Zeilen, die der gesendeten Datei entsprechen (Studenten, die detaillierte Informationen benötigen, können dies tun). Drucken Sie außerdem das Protokollmuster aus, das der Anzahl der Zeilen entspricht, der Endausführungszeit, der Gesamtmenge der gesendeten Daten, der Wahrscheinlichkeit des Sendens des EPS-Intervalls und der Sendezeit. Bei Bedarf können Sie auch Ausgabeinformationen zu ausgelösten Ausnahmen hinzufügen. Wenn das Programm ungewöhnlich oder manuell unterbrochen wird, können Sie trotzdem ein vollständiges Protokoll ausgeben. Sie können das Protokoll auch hinzufügen, wenn Sie Textkorrespondenz benötigen. Schreiben Sie in eine TXT-Datei.
Fügen Sie hier eine Bildbeschreibung ein

expandieren

Simulationsquellen-IP

Die oben eingefügte Sendemethode besteht darin, Datenpakete mit der lokalen IP gemäß dem Socket zu senden. Bei besonderem Bedarf kann auch die Quell-IP simuliert werden, um Datenpakete zu senden.
Module, die importiert werden müssen: aus scapy.layers.inet Import IP, UDP, aus scapy.all Import *, damit die Datenpakete gemäß unserer voreingestellten IP gesendet werden können
Fügen Sie hier eine Bildbeschreibung ein

Problem mit verstümmelten Datenpaketen (Verwendung von Python3)

Führen Sie das Modul import importlib importlib.reload(sys) ein.
Wenn die gesendeten Datenpakete immer noch verstümmelt sind, müssen Sie überprüfen, ob ein Problem mit dem gesendeten Codierungsformat vorliegt. Versuchen Sie es mit .encode('GBK') und .encode('UTF- 8').
Wenn Sie das Codierungsformat ändern und es nicht erhalten, müssen Sie prüfen, ob das gesendete Datenpaket zu lang ist und ob das aktuell gesendete Datenpaket zu lang ist und nicht gesendet werden kann.

andere Verbindungsmethoden

Wenn wir die Verbindungsmethode auswählen, können wir auch TCP SOCK_STREAM wählen, was zuverlässiger als UDP ist, aber der entsprechende Overhead ist größer

Acho que você gosta

Origin blog.csdn.net/qq_36616956/article/details/128928988
Recomendado
Clasificación