Un generador de tráfico "orgánico" HTTP/S rápido y sucio.
Sólo un simple script de Python (mal escrito) que "navega" por Internet sin rumbo comenzando en ROOT_URLS
predefinidas y haciendo "clic" aleatoriamente en enlaces de páginas hasta alcanzar el MAX_DEPTH
predefinido.
Creé esto como un generador de ruido para usarlo en una simulación de respuesta a incidentes/defensa de red. El único problema es que mi entorno de simulación utiliza múltiples dispositivos IDS/IPS/NGFW que no pasan ni registran repeticiones TCP simples de tráfico almacenado. Necesitaba que el tráfico fuera lo más orgánico posible, básicamente imitando a los usuarios reales navegando por la web.
Probado en Ubuntu 14.04 y 16.04 mínimo, pero debería funcionar en cualquier sistema con Python instalado.
Tan simple como parece...
Primero, especifique algunas configuraciones en la parte superior del script...
MAX_DEPTH = 10
, MIN_DEPTH = 5
A partir de cada URL raíz (es decir: www.yahoo.com), nuestro generador hará clic en una profundidad seleccionada aleatoriamente entre MIN_DEPTH y MAX_DEPTH.El intervalo entre cada solicitud HTTP GET se elige al azar entre las dos variables siguientes...
MIN_WAIT = 5
Espere un mínimo de 5
segundos entre solicitudes... Tenga cuidado con realizar solicitudes demasiado rápido ya que eso tiende a cabrear a los servidores web.
MAX_WAIT = 10
Creo que entiendes el punto.
DEBUG = False
El registrador de un pobre. Configúrelo en True
para una impresión detallada en tiempo real en la consola para depuración o desarrollo. Incorporaré el registro adecuado más adelante (tal vez).
ROOT_URLS = [url1,url2,url3]
La lista de URL raíz desde las que comenzar al navegar. Seleccionado al azar.
blacklist = [".gif", "intent/tweet", "badlink", etc...]
Una lista negra de cadenas con las que verificamos cada enlace. Si el enlace contiene alguna de las cadenas de esta lista, se descarta. Útil para evitar cosas que no sean amigables para generar tráfico, como "¡Tuitea esto!" enlaces o enlaces a archivos de imágenes.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......'
Lo has adivinado, el agente de usuario que nuestro navegador sin cabeza entrega al servidor web. Probablemente puedas dejarlo configurado con el valor predeterminado, pero no dudes en cambiarlo. Recomiendo encarecidamente utilizar uno común/válido o, de lo contrario, probablemente obtendrá una velocidad limitada rápidamente.
Lo único que necesita y quizás no tenga son requests
. Cógelo con
sudo pip install requests
Primero cree su archivo de configuración:
cp config.py.template config.py
Ejecute el generador:
python gen.py
Para obtener más detalles sobre lo que sucede bajo el capó, cambie la variable Debug en config.py
de False
a True
. Esto proporciona el siguiente resultado...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
La última URL intentada proporciona un buen ejemplo de cuándo una URL concreta arroja un error. Simplemente lo agregamos a nuestra matriz config.blacklist
en la memoria y continuamos navegando. Esto evita que una URL incorrecta conocida regrese a la cola.