
Ein schneller und schmutziger HTTP/S-"organischer" Traffic-Generator.
Ein schneller und schmutziger HTTP/S „organischer" Traffic-Generator.
Nur ein einfaches (schlecht geschriebenes) Python-Skript, das ziellos im Internet „surft", indem es bei vordefinierten ROOT_URLS startet und zufällig auf Links auf Seiten klickt, bis die vordefinierte MAX_DEPTH erreicht ist.
Ich habe dies als Rauschgenerator für eine Incident Response / Netzwerkverteidigungssimulation erstellt. Das einzige Problem ist, dass meine Simulationsumgebung mehrere IDS/IPS/NGFW-Geräte verwendet, die einfache TCP-Replays von Dosen-Traffic nicht durchlassen und protokollieren. Ich brauchte den Traffic so organisch wie möglich, um im Wesentlichen echte Benutzer beim Surfen im Web nachzuahmen.
Getestet auf Ubuntu 14.04 & 16.04 Minimal, sollte aber auf jedem System mit installiertem Python funktionieren.
So einfach wie es nur geht...
Zuerst einige Einstellungen am Anfang des Skripts festlegen...
MAX_DEPTH = 10, MIN_DEPTH = 5 Ausgehend von jeder Stamm-URL (z. B. www.yahoo.com) klickt unser Generator auf eine zufällig zwischen MIN_DEPTH und MAX_DEPTH gewählte Tiefe.Das Intervall zwischen jeder HTTP-GET-Anfrage wird zufällig zwischen den folgenden beiden Variablen gewählt:
MIN_WAIT = 5 Minimale Wartezeit von 5 Sekunden zwischen Anfragen... Seien Sie vorsichtig mit zu schnellen Anfragen, da das Webserver verärgern kann.
MAX_WAIT = 10 Ich denke, der Punkt ist klar.
DEBUG = False Ein armer Mann's Logger. Auf True setzen für ausführliche Echtzeit-Ausgabe auf der Konsole zum Debuggen oder Entwickeln. Ich werde später eine ordentliche Protokollierung einbauen (vielleicht).
ROOT_URLS = [url1,url2,url3] Die Liste der Stamm-URLs, von denen beim Surfen ausgegangen wird. Zufällig ausgewählt.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Eine Blacklist von Zeichenfolgen, gegen die jeder Link geprüft wird. Wenn der Link eine der Zeichenfolgen in dieser Liste enthält, wird er verworfen. Nützlich, um Dinge zu vermeiden, die nicht traffic-generator-freundlich sind, wie „Tweet this!"-Links oder Links zu Bilddateien.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' Sie haben es erraten, der User-Agent, den unser Headless-Browser an den Webserver übergibt. Sie können es wahrscheinlich auf dem Standardwert belassen, aber ändern Sie es nach Belieben. Ich würde dringend empfehlen, einen gängigen/gültigen zu verwenden, sonst werden Sie wahrscheinlich schnell ratenlimitiert.
Das Einzige, was Sie brauchen und vielleicht nicht haben, ist requests. Holen Sie es mit
sudo pip install requests
Erstellen Sie zuerst Ihre Konfigurationsdatei:
cp config.py.template config.py
Führen Sie den Generator aus:
python gen.py
Um weitere Details darüber zu erhalten, was unter der Haube passiert, ändern Sie die Debug-Variable in config.py von False auf True. Dies liefert die folgende Ausgabe:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Traffic generator started
Diving between 3 and 10 links deep into 489 different root URLs,
Waiting between 5 and 10 seconds between requests.
This script will run indefinitely. Ctrl+C to stop.
Randomly selecting one of 489 URLs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://arstechnica.com] ~~~ [depth = 7]
Requesting page...
Page size: 77.6KB
Data meter: 77.6KB
Good requests: 1
Bad reqeusts: 0
Scraping page for links
Found 171 valid links
Pausing for 7 seconds...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://arstechnica.com/author/jon-brodkin/] ~~~ [depth = 6]
Requesting page...
Page size: 75.7KB
Data meter: 153.3KB
Good requests: 2
Bad reqeusts: 0
Scraping page for links
Found 168 valid links
Pausing for 9 seconds...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://arstechnica.com/information-technology/2020/01/directv-races-to-decommission-broken-boeing-satellite-before-it-explodes/] ~~~ [depth = 5]
Requesting page...
Page size: 43.8KB
Data meter: 197.1KB
Good requests: 3
Bad reqeusts: 0
Scraping page for links
Found 32 valid links
Pausing for 8 seconds...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://www.facebook.com/sharer.php?u=https%3A%2F%2Farstechnica.com%2F%3Fpost_type%3Dpost%26p%3D1647915] ~~~ [depth = 4]
Requesting page...
Page size: 64.2KB
Data meter: 261.2KB
Good requests: 4
Bad reqeusts: 0
Scraping page for links
Found 0 valid links
Stopping and blacklisting: no links
Die zuletzt aufgerufene URL bietet ein gutes Beispiel dafür, wann eine bestimmte URL einen Fehler wirft. Wir fügen sie einfach dem config.blacklist-Array im Speicher hinzu und setzen das Surfen fort. Dies verhindert, dass eine bekannte fehlerhafte URL zur Warteschlange zurückkehrt.