
Un générateur de trafic HTTP/S « organique » rapide et sale.
Un générateur de trafic HTTP/S « organique », rapide et bricolé.
C'est juste un script Python simple (mal écrit) qui « navigue » sans but sur Internet en partant des ROOT_URLS prédéfinies et en « cliquant » aléatoirement sur des liens des pages jusqu'à ce que la MAX_DEPTH prédéfinie soit atteinte.
J'ai créé cela comme générateur de bruit pour une simulation de réponse à incident / défense réseau. Le seul problème est que mon environnement de simulation utilise plusieurs dispositifs IDS/IPS/NGFW qui ne transmettront pas et ne journaliseront pas de simples rejeux TCP de trafic préenregistré. J'avais besoin d'un trafic aussi organique que possible, imitant essentiellement de vrais utilisateurs naviguant sur le Web.
Testé sur Ubuntu 14.04 et 16.04 minimal, mais devrait fonctionner sur tout système avec Python installé.
À peu près aussi simple que possible...
D'abord, définissez quelques réglages en haut du script...
MAX_DEPTH = 10, MIN_DEPTH = 5 En partant de chaque URL racine (ex : www.yahoo.com), notre générateur clique jusqu'à une profondeur choisie aléatoirement entre MIN_DEPTH et MAX_DEPTH.L'intervalle entre chaque requête HTTP GET est choisi aléatoirement entre les deux variables suivantes...
MIN_WAIT = 5 Attendez un minimum de 5 secondes entre les requêtes... Faites attention à ne pas envoyer les requêtes trop rapidement, car cela a tendance à énerver les serveurs web.
MAX_WAIT = 10 Je pense que vous avez compris le principe.
DEBUG = False Un logger de fortune. Mettez-le à True pour un affichage verbeux en temps réel dans la console, pour le débogage ou le développement. J'intégrerai une vraie journalisation plus tard (peut-être).
ROOT_URLS = [url1,url2,url3] La liste des URL racines à partir desquelles commencer la navigation. Sélectionnée aléatoirement.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Une liste noire de chaînes de caractères vérifiée pour chaque lien. Si le lien contient l'une des chaînes de la liste, il est écarté. Utile pour éviter les éléments peu adaptés à un générateur de trafic, comme les liens « Tweet this! » ou les liens vers des fichiers image.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' Vous l'avez deviné, c'est le user-agent que notre navigateur sans tête transmet au serveur web. Vous pouvez probablement le laisser par défaut, mais n'hésitez pas à le modifier. Je vous recommande fortement d'en utiliser un courant/valide, sinon vous risquez d'être rapidement soumis à une limitation de débit.
La seule chose dont vous avez besoin et que vous n'avez peut-être pas est requests. Installez-la avec
sudo pip install requests
Créez d'abord votre fichier de configuration :
cp config.py.template config.py
Exécutez le générateur :
python gen.py
Pour en savoir plus sur ce qui se passe sous le capot, changez la variable Debug dans config.py de False à True. Cela fournit la sortie suivante...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
La dernière URL tentée fournit un bon exemple du moment où une URL particulière génère une erreur. Nous l'ajoutons simplement au tableau config.blacklist en mémoire, puis nous continuons la navigation. Cela empêche une URL connue comme mauvaise de revenir dans la file d'attente.