
Um gerador rápido e sujo de tráfego HTTP/S 'orgânico'.
Um gerador de tráfego HTTP/S "orgânico" rápido e improvisado.
Apenas um script Python simples (mal escrito) que "navega" pela internet sem rumo, começando em ROOT_URLS predefinidos e "clicando" aleatoriamente em links das páginas até que o MAX_DEPTH predefinido seja atingido.
Criei isto como um gerador de ruído para usar numa simulação de Resposta a Incidentes / Defesa de Rede. O único problema é que o meu ambiente de simulação usa vários dispositivos IDS/IPS/NGFW que não permitem nem registam 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 a navegar na web.
Testado em Ubuntu 14.04 e 16.04 minimal, mas deve funcionar em qualquer sistema com Python instalado.
É basicamente o mais simples possível...
Primeiro, especifique algumas definições no topo do script...
MAX_DEPTH = 10, MIN_DEPTH = 5 Começando de cada URL raiz (ex.: www.yahoo.com), o nosso gerador irá clicar até uma profundidade
selecionada aleatoriamente entre MIN_DEPTH e MAX_DEPTH.O intervalo entre cada requisição HTTP GET é escolhido aleatoriamente entre as seguintes duas variáveis...
MIN_WAIT = 5 Espere no mínimo 5 segundos entre requisições... Tenha cuidado ao fazer requisições rápido demais, pois isso tende a irritar os servidores web.
MAX_WAIT = 10 Acho que percebeu a ideia.
DEBUG = False Um logger improvisado. Defina como True para impressão verbosa em tempo real no console para depuração ou desenvolvimento. Vou incorporar um registro adequado mais tarde (talvez).
ROOT_URLS = [url1,url2,url3] A lista de URLs raiz a partir das quais começar a navegação. Selecionadas aleatoriamente.
blacklist = [".gif", "intent/tweet", "badlink", etc...] Uma lista negra de strings contra as quais verificamos 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 o nosso navegador headless entrega ao servidor web. Provavelmente pode deixá-lo no padrão, mas sinta-se à vontade para alterá-lo. Eu recomendaria fortemente usar um comum/válido, caso contrário você provavelmente será limitado rapidamente.
A única coisa de que você precisa e que talvez não tenha é requests. Instale-a com
sudo pip install requests
Crie primeiro o seu arquivo de configuração:
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 lança um erro. Simplesmente a adicionamos ao nosso array config.blacklist em memória e continuamos a navegar. Isso evita que uma URL conhecida como ruim volte à fila.