Ein schneller und schmutziger HTTP/S-„organischer“ Traffic-Generator.
Nur ein einfaches (schlecht geschriebenes) Python-Skript, das ziellos das Internet „durchsucht“, indem es bei vordefinierten ROOT_URLS
beginnt und nach dem Zufallsprinzip 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 besteht darin, dass meine Simulationsumgebung mehrere IDS/IPS/NGFW-Geräte verwendet, die einfache TCP-Wiedergaben von vorgefertigtem Datenverkehr nicht weiterleiten und protokollieren. Ich wollte, dass der Datenverkehr so organisch wie möglich ist und im Wesentlichen echte Benutzer nachahmt, die im Internet surfen.
Getestet auf Ubuntu 14.04 und 16.04 (minimal), sollte aber auf jedem System funktionieren, auf dem Python installiert ist.
So einfach wie es nur geht...
Legen Sie zunächst einige Einstellungen oben im Skript fest ...
MAX_DEPTH = 10
, MIN_DEPTH = 5
Ausgehend von jeder Root-URL (z. B. www.yahoo.com) klickt unser Generator bis zu einer Tiefe, die zufällig zwischen MIN_DEPTH und MAX_DEPTH ausgewählt wird.Das Intervall zwischen allen HTTP-GET-Anfragen wird zufällig aus den folgenden zwei Variablen ausgewählt ...
MIN_WAIT = 5
Warten Sie zwischen den Anfragen mindestens 5
Sekunden. Seien Sie vorsichtig, wenn Sie Anfragen zu schnell stellen, da dies die Webserver verärgern kann.
MAX_WAIT = 10
Ich denke, Sie verstehen, worauf es ankommt.
DEBUG = False
Der Logger eines armen Mannes. Auf True
setzen, um eine ausführliche Echtzeitausgabe an die Konsole zum Debuggen oder Entwickeln zu ermöglichen. Ich werde später (vielleicht) die richtige Protokollierung einbauen.
ROOT_URLS = [url1,url2,url3]
Die Liste der Root-URLs, mit denen beim Surfen begonnen werden soll. Zufällig ausgewählt.
blacklist = [".gif", "intent/tweet", "badlink", etc...]
Eine Blacklist mit Zeichenfolgen, anhand derer wir jeden Link überprüfen. 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 können die Standardeinstellung wahrscheinlich beibehalten, sie aber jederzeit ändern. Ich würde dringend empfehlen, ein allgemeines/gültiges zu verwenden, sonst wird es wahrscheinlich schnell zu einer Ratenbegrenzung kommen.
Das Einzige, was Sie brauchen und möglicherweise nicht haben, sind requests
. Schnapp es dir mit
sudo pip install requests
Erstellen Sie zuerst Ihre Konfigurationsdatei:
cp config.py.template config.py
Betreiben Sie den Generator:
python gen.py
Um mehr darüber zu erfahren, was unter der Haube passiert, ändern Sie die Debug-Variable in config.py
von False
in 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 ist ein gutes Beispiel dafür, wann eine bestimmte URL einen Fehler auslöst. Wir fügen es einfach zu unserem config.blacklist
Array im Speicher hinzu und surfen weiter. Dadurch wird verhindert, dass eine bekanntermaßen fehlerhafte URL in die Warteschlange zurückkehrt.