
Un generatore di traffico HTTP/S "organico" rapido e sporco.
Un generatore di traffico HTTP/S "organico", semplice e rapido.
È solo un semplice script Python (scritto male) che "naviga" senza meta su internet partendo da ROOT_URLS predefinite e facendo "click" casuale sui link delle pagine finché non viene raggiunta la MAX_DEPTH predefinita.
L'ho creato come generatore di rumore da usare per una simulazione di Incident Response / Network Defense. L'unico problema è che il mio ambiente di simulazione usa molti dispositivi IDS/IPS/NGFW che non fanno passare e non registrano semplici TCPreplay di traffico preconfezionato. Avevo bisogno che il traffico fosse il più organico possibile, imitando essenzialmente utenti reali che navigano sul web.
Testato su Ubuntu 14.04 e 16.04 minimal, ma dovrebbe funzionare su qualsiasi sistema con Python installato.
Semplice al massimo...
Prima di tutto, specifica alcune impostazioni all'inizio dello script...
MAX_DEPTH = 10, MIN_DEPTH = 5 Partendo da ogni URL radice (es: www.yahoo.com), il nostro generatore farà click fino a una profondità
scelta casualmente tra MIN_DEPTH e MAX_DEPTH.L'intervallo tra ogni richiesta HTTP GET viene scelto in modo casuale tra le due variabili seguenti...
MIN_WAIT = 5 Aspetta un minimo di 5 secondi tra le richieste... Fai attenzione a non fare richieste troppo velocemente perché tende a far arrabbiare i server web.
MAX_WAIT = 10 Penso che il concetto sia chiaro.
DEBUG = False Un logger da poveracci. Impostalo su True per una stampa dettagliata in tempo reale sulla console per debug o sviluppo. Integrerò un logging più corretto più avanti (forse).
ROOT_URLS = [url1,url2,url3] L'elenco degli URL radice da cui partire durante la navigazione. Selezionati casualmente.
blacklist = [".gif", "intent/tweet", "badlink", ecc...] Una blacklist di stringhe contro cui controlliamo ogni link. Se il link contiene una qualsiasi delle stringhe in questa lista, viene scartato. Utile per evitare cose poco adatte a un generatore di traffico come i link "Twitta questo!" o i link a file immagine.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' Hai indovinato, lo user-agent che il nostro browser headless presenta al server web. Probabilmente puoi lasciarlo impostato sul valore predefinito, ma sentiti libero di cambiarlo. Ti consiglio vivamente di usarne uno comune/valido, altrimenti è probabile che venga applicato un rate-limit abbastanza in fretta.
L'unica cosa di cui hai bisogno e che potresti non avere è requests. Installalo con
sudo pip install requests
Crea prima il tuo file di configurazione:
cp config.py.template config.py
Esegui il generatore:
python gen.py
Per avere più dettagli su cosa succede dietro le quinte, cambia la variabile Debug in config.py da False a True. Questo fornisce il seguente output...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
L'ultimo URL tentato fornisce un buon esempio di quando un URL particolare genera un errore. Lo aggiungiamo semplicemente all'array config.blacklist in memoria e continuiamo a navigare. Questo impedisce a un URL noto come problematico di tornare in coda.