
Un generatore di traffico HTTP/S "organico" veloce e sporco.
Un generatore di traffico HTTP/S "organico" rapido e sporco.
Solo un semplice script Python (scritto male) che "naviga" senza scopo su Internet partendo da ROOT_URLS predefiniti e "cliccando" casualmente link sulle pagine fino a raggiungere il MAX_DEPTH predefinito.
L'ho creato come generatore di rumore da utilizzare per una simulazione di Incident Response / Network Defense. L'unico problema è che il mio ambiente di simulazione utilizza più dispositivi IDS/IPS/NGFW che non passeranno e registreranno semplici TCPreplay di traffico preconfezionato. Avevo bisogno che il traffico fosse il più organico possibile, essenzialmente imitando utenti reali che navigano sul web.
Testato su Ubuntu 14.04 e 16.04 minimal, ma dovrebbe funzionare su qualsiasi sistema con Python installato.
Più semplice di così si muore...
Per prima cosa, 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 cliccherà fino a una profondità selezionata casualmente tra MIN_DEPTH e MAX_DEPTH.L'intervallo tra ogni richiesta HTTP GET viene scelto casualmente tra le seguenti due variabili...
MIN_WAIT = 5 Attendere un minimo di 5 secondi tra le richieste... Fai attenzione a 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 per poveracci. Imposta a True per una stampa verbosa in tempo reale sulla console per debug o sviluppo. Implementerò un logging adeguato più avanti (forse).
ROOT_URLS = [url1,url2,url3] L'elenco degli URL radice da cui iniziare la navigazione. Selezionato casualmente.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Una blacklist di stringhe che controlliamo per ogni link. Se il link contiene una qualsiasi delle stringhe in questa lista, viene scartato. Utile per evitare cose non adatte al generatore di traffico come link "Twitta questo!" o 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 cede al server web. Probabilmente puoi lasciarlo impostato al default, ma sentiti libero di cambiarlo. Suggerisco vivamente di usarne uno comune/valido altrimenti verrai probabilmente limitato rapidamente.
L'unica cosa di cui hai bisogno e che potresti non avere è requests. Scaricalo 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 ottenere maggiori dettagli su cosa sta succedendo sotto il cofano, imposta 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 particolare URL genera un errore. Lo aggiungiamo semplicemente al nostro array config.blacklist in memoria e continuiamo la navigazione. Questo impedisce a un URL noto come non valido di tornare nella coda.