
Um gerador de tráfego HTTP/S "orgânico" rápido e sujo.
Um gerador de tráfego HTTP/S "orgânico", rápido e sujo.
Apenas um script Python simples (mal escrito) que "navega" pela internet de forma aleatória, começando por ROOT_URLS pré-definidos e "clicando" aleatoriamente em links nas páginas até atingir o MAX_DEPTH pré-definido.
Criei isso como um gerador de ruído para usar em uma simulação de Resposta a Incidentes / Defesa de Rede. O único problema é que meu ambiente de simulação usa vários dispositivos IDS/IPS/NGFW que não passarão nem registrarão simples TCPreplays de tráfego pré-gravado. Eu precisava que o tráfego fosse o mais orgânico possível, essencialmente imitando usuários reais navegando na web.
Testado no Ubuntu 14.04 e 16.04 minimal, mas deve funcionar em qualquer sistema com Python instalado.
Simples assim...
Primeiro, especifique algumas configurações no topo do script...
MAX_DEPTH = 10, MIN_DEPTH = 5 Começando de cada URL raiz (ex: www.yahoo.com), nosso gerador clicará até uma profundidade selecionada aleatoriamente entre MIN_DEPTH e MAX_DEPTH.O intervalo entre cada requisição HTTP GET é escolhido aleatoriamente entre as duas variáveis a seguir...
MIN_WAIT = 5 Aguarde no mínimo 5 segundos entre as requisições... Cuidado para não fazer requisições muito rápidas, pois isso tende a irritar os servidores web.
MAX_WAIT = 10 Acho que você entendeu.
DEBUG = False Um logger de pobre. Defina como True para impressão detalhada em tempo real no console para depuração ou desenvolvimento. Incorporarei um logging adequado mais tarde (talvez).
ROOT_URLS = [url1,url2,url3] A lista de URLs raiz para começar a navegar. Selecionada aleatoriamente.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Uma lista negra de strings que verificamos em cada link. Se o link contiver qualquer uma das strings desta lista, é descartado. Útil para evitar coisas que não são amigáveis ao gerador de tráfego, como links "Tweet this!" ou links para arquivos de imagem.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' Você adivinhou, o user-agent que nosso navegador headless entrega ao servidor web. Você provavelmente pode deixá-lo como padrão, mas sinta-se à vontade para alterá-lo. Eu sugiro fortemente usar um comum/válido, caso contrário você provavelmente será limitado rapidamente.
A única coisa que você precisa e pode não ter é requests. Obtenha com
sudo pip install requests
Crie seu arquivo de configuração primeiro:
cp config.py.template config.py
Execute o gerador:
python gen.py
Para obter mais detalhes sobre o que está acontecendo nos bastidores, altere a variável Debug em config.py de False para True. Isso fornece a seguinte saída...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
A última URL tentada fornece um bom exemplo de quando uma URL específica gera um erro. Simplesmente a adicionamos ao nosso array config.blacklist na memória e continuamos navegando. Isso impede que uma URL conhecidamente ruim retorne à fila.