
Un générateur de trafic HTTP/S "organique" rapide et sale.
Un générateur de trafic HTTP/S "organique" rapide et sale.
Un simple script Python (mal écrit) qui "navigue" sans but sur Internet en démarrant depuis des ROOT_URLS prédéfinies et en "cliquant" aléatoirement sur des liens de pages jusqu'à ce que la MAX_DEPTH prédéfinie soit atteinte.
Je l'ai créé comme générateur de bruit pour une simulation de Réponse aux Incidents / Défense Réseau. Le seul problème est que mon environnement de simulation utilise plusieurs dispositifs IDS/IPS/Pare-feu de nouvelle génération qui ne laisseront pas passer et ne journaliseront pas de simples rejeux TCP de trafic préenregistré. J'avais besoin que le trafic soit 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é.
Aussi simple que possible...
Tout d'abord, spécifiez quelques paramètres 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 au moins 5 secondes entre les requêtes... Soyez prudent avec des requêtes trop rapides car cela a tendance à énerver les serveurs web.
MAX_WAIT = 10 Je pense que vous avez compris l'idée.
DEBUG = False Un journal de pauvres. Mettez à True pour un affichage détaillé en temps réel dans la console pour le débogage ou le développement. J'intégrerai une journalisation appropriée plus tard (peut-être).
ROOT_URLS = [url1,url2,url3] La liste des URL racines à partir desquelles commencer la navigation. Sélectionnées aléatoirement.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Une liste noire de chaînes que nous vérifions pour chaque lien. Si le lien contient l'une des chaînes de cette liste, il est rejeté. Utile pour éviter les éléments non adaptés au générateur de trafic comme les liens "Tweetez ceci !" ou les liens vers des fichiers image.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' Vous l'avez deviné, l'user-agent que notre navigateur sans tête remet au serveur web. Vous pouvez probablement le laisser avec la valeur par défaut, mais n'hésitez pas à le changer. Je recommande vivement d'utiliser un user-agent courant et valide, sinon vous risquez d'être rapidement limité en débit.
La seule chose dont vous avez besoin et que vous pourriez ne pas avoir 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 obtenir plus de détails sur ce qui se passe sous le capot, passez 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 à notre tableau config.blacklist en mémoire, et continuons la navigation. Cela empêche une URL connue comme mauvaise de revenir dans la file d'attente.