Um gerador de tráfego "orgânico" HTTP/S rápido e sujo.
Apenas um script Python simples (mal escrito) que "navega" na Internet sem rumo, começando em ROOT_URLS
predefinidos e "clicando" aleatoriamente em links nas páginas até que o MAX_DEPTH
predefinido seja atingido.
Eu 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 passam e registram replays TCP simples de tráfego enlatado. 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 mínimo, mas deve funcionar em qualquer sistema com Python instalado.
Tão simples quanto parece...
Primeiro, especifique algumas configurações no topo do script...
MAX_DEPTH = 10
, MIN_DEPTH = 5
A partir de cada URL raiz (ou seja: www.yahoo.com), nosso gerador clicará em uma profundidade selecionada aleatoriamente entre MIN_DEPTH e MAX_DEPTH.O intervalo entre cada solicitação HTTP GET é escolhido aleatoriamente entre as duas variáveis a seguir...
MIN_WAIT = 5
Aguarde no mínimo 5
segundos entre as solicitações... Tenha cuidado ao fazer solicitações muito rapidamente, pois isso tende a irritar os servidores web.
MAX_WAIT = 10
Acho que você entendeu.
DEBUG = False
O madeireiro de um homem pobre. Defina como True
para impressão detalhada em tempo real para console para depuração ou desenvolvimento. Incorporarei o registro adequado mais tarde (talvez).
ROOT_URLS = [url1,url2,url3]
A lista de URLs raiz para iniciar durante a navegação. Selecionado aleatoriamente.
blacklist = [".gif", "intent/tweet", "badlink", etc...]
Uma lista negra de strings que verificamos em cada link. Se o link contiver alguma das strings desta lista, ele será descartado. Útil para evitar coisas que não são amigáveis ao gerador de tráfego, como "Tweet this!" links ou links para arquivos de imagem.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......'
Você adivinhou, o agente do usuário que nosso navegador sem cabeça entrega ao servidor web. Provavelmente você pode deixá-lo definido como padrão, mas fique à vontade para alterá-lo. Eu sugiro fortemente o uso de um comum/válido, caso contrário você provavelmente terá uma taxa limitada rapidamente.
A única coisa que você precisa e talvez não tenha são requests
. Pegue 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 tentativa de URL fornece um bom exemplo de quando um URL específico gera um erro. Simplesmente o adicionamos ao nosso array config.blacklist
na memória e continuamos navegando. Isso evita que um URL inválido conhecido retorne à fila.