
Ein schneller und schmutziger HTTP/S-„organischer“ Traffic-Generator.
Ein schneller und dreckiger HTTP/S-„organischer“ Traffic-Generator.
Nur ein einfaches (schlecht geschriebenes) Python-Skript, das ziellos im Internet „herumstöbert“, indem es an vordefinierten ROOT_URLS startet und zufällig Links auf Seiten „anklickt“, bis die vordefinierte MAX_DEPTH erreicht ist.
Ich habe das als Noise-Generator für eine Incident-Response-/Network-Defense-Simulation erstellt. Das einzige Problem ist, dass meine Simulationsumgebung mehrere IDS/IPS/NGFW-Geräte verwendet, die einfache TCP-Replays von vorproduziertem Traffic nicht durchlassen und protokollieren. Ich brauchte den Traffic so organisch wie möglich, im Wesentlichen wie echte Benutzer, die im Web surfen.
Getestet auf Ubuntu 14.04 & 16.04 Minimal, sollte aber auf jedem System mit installiertem Python funktionieren.
Etwa so einfach wie es nur geht ...
Zuerst ein paar Einstellungen am Anfang des Skripts festlegen ...
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 gewählt wird.Das Intervall zwischen jeder HTTP-GET-Anfrage wird zufällig zwischen den folgenden beiden Variablen gewählt ...
MIN_WAIT = 5 Warte mindestens 5 Sekunden zwischen den Anfragen ... Sei vorsichtig mit zu schnellen Anfragen, da das Webserver tendenziell verärgert.
MAX_WAIT = 10 Ich denke, du verstehst, worauf ich hinaus will.
DEBUG = False Ein Logging für arme Leute. Auf True setzen für ausführliches Echtzeit-Printing auf der Konsole zum Debuggen oder Entwickeln. Ich werde später ordentliches Logging einbauen (vielleicht).
ROOT_URLS = [url1,url2,url3] Die Liste der Root-URLs, von denen aus beim Surfen gestartet wird. Wird zufällig ausgewählt.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Eine Blacklist mit Strings, gegen die wir jeden Link prüfen. Wenn der Link einen der Strings 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).......' Du hast es erraten, der User-Agent, den unser Headless-Browser an den Webserver übergibt. Du kannst ihn wahrscheinlich auf dem Standardwert lassen, aber du kannst ihn gerne ändern. Ich würde dringend empfehlen, einen gängigen/gültigen zu verwenden, sonst wirst du wahrscheinlich schnell rate-limitiert.
Das Einzige, was du brauchst und vielleicht nicht hast, ist requests. Hol es dir mit
sudo pip install requests
Erstelle zuerst deine Konfigurationsdatei:
cp config.py.template config.py
Starte den Generator:
python gen.py
Um mehr Details darüber zu bekommen, was unter der Haube passiert, ändere 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 versuchte URL ist ein gutes Beispiel dafür, wann eine bestimmte URL einen Fehler auslöst. Wir fügen sie einfach in-memory zu unserem config.blacklist-Array hinzu und surfen weiter. Das verhindert, dass eine bekannte schlechte URL in die Warteschlange zurückkehrt.