Un générateur de trafic "organique" HTTP/S rapide et sale.
Juste un simple script Python (mal écrit) qui « navigue » sans but sur Internet en commençant par ROOT_URLS
prédéfinis et en « cliquant » de manière aléatoire sur les liens sur les pages jusqu'à ce que le MAX_DEPTH
prédéfini soit atteint.
Je l'ai créé comme générateur de bruit à utiliser pour une simulation de réponse aux incidents/défense de réseau. Le seul problème est que mon environnement de simulation utilise plusieurs périphériques IDS/IPS/NGFW qui ne transmettront pas et n'enregistreront pas de simples replays TCP du trafic standardisé. J'avais besoin que le trafic soit aussi organique que possible, imitant essentiellement les vrais utilisateurs naviguant sur le Web.
Testé sur Ubuntu 14.04 et 16.04 minimal, mais devrait fonctionner sur n'importe quel système sur lequel Python est installé.
Aussi simple que cela puisse paraître...
Tout d'abord, spécifiez quelques paramètres en haut du script...
MAX_DEPTH = 10
, MIN_DEPTH = 5
À partir de chaque URL racine (c'est-à-dire : www.yahoo.com), notre générateur cliquera jusqu'à une profondeur choisie au hasard 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 minimum 5
secondes entre les requêtes... Soyez prudent lorsque vous faites des requêtes trop rapidement car cela a tendance à énerver les serveurs web.
MAX_WAIT = 10
Je pense que vous comprenez.
DEBUG = False
L'enregistreur d'un pauvre. Définissez sur True
pour une impression détaillée en temps réel sur la console à des fins de débogage ou de développement. J'intégrerai une journalisation appropriée plus tard (peut-être).
ROOT_URLS = [url1,url2,url3]
La liste des URL racine à partir desquelles démarrer lors de la navigation. Sélectionné au hasard.
blacklist = [".gif", "intent/tweet", "badlink", etc...]
Une liste noire de chaînes par rapport auxquelles nous vérifions chaque lien. Si le lien contient l’une des chaînes de cette liste, il est ignoré. Utile pour éviter les choses qui ne sont pas adaptées aux générateurs de trafic comme « Tweetez ceci ! » liens ou liens vers des fichiers image.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......'
Vous l'aurez deviné, l'agent utilisateur que notre navigateur sans tête remet au serveur Web. Vous pouvez probablement le laisser par défaut, mais n'hésitez pas à le modifier. Je suggère fortement d'en utiliser un commun/valide, sinon vous obtiendrez probablement rapidement un débit limité.
La seule chose dont vous avez besoin et que vous n'avez peut-être pas, ce sont requests
. Saisissez-le 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, modifiez la variable Debug dans config.py
de False
à True
. Cela fournit le résultat suivant...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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 mauvaise URL connue de revenir dans la file d'attente.