
Быстрый и грязный генератор "органического" HTTP/S трафика.
Быстрый и грязный генератор "органического" HTTP/S трафика.
Простой (плохо написанный) скрипт на Python, который бесцельно "бродит" по интернету, начиная с предопределённых ROOT_URLS и случайным образом "кликая" по ссылкам на страницах, пока не будет достигнута предопределённая MAX_DEPTH.
Я создал это как генератор шума для использования в симуляции реагирования на инциденты / защиты сети. Единственная проблема в том, что в моей симуляционной среде используются несколько устройств IDS/IPS/NGFW, которые не пропускают и не регистрируют простые TCP-повторы готового трафика. Мне нужен был трафик максимально органичный, имитирующий реальных пользователей, просматривающих веб-страницы.
Протестировано на Ubuntu 14.04 и 16.04 minimal, но должно работать на любой системе с установленным Python.
Всё просто до невозможности...
Сначала задайте несколько параметров в начале скрипта...
MAX_DEPTH = 10, MIN_DEPTH = 5 Начиная с каждого корневого URL (например: www.yahoo.com), наш генератор будет переходить на глубину, случайно выбранную между MIN_DEPTH и MAX_DEPTH.Интервал между каждым HTTP GET запросом выбирается случайным образом между следующими двумя переменными...
MIN_WAIT = 5 Минимальное ожидание 5 секунд между запросами... Будьте осторожны с быстрыми запросами, так как это обычно раздражает веб-серверы.
MAX_WAIT = 10 Думаю, суть ясна.
DEBUG = False Логгер для бедных. Установите True для подробного вывода в реальном времени в консоль для отладки или разработки. Позже добавлю нормальное логирование (может быть).
ROOT_URLS = [url1,url2,url3] Список корневых URL, с которых начинается просмотр. Выбираются случайно.
blacklist = [".gif", "intent/tweet", "badlink", и т.д...] Чёрный список строк, с которыми мы сравниваем каждую ссылку. Если ссылка содержит любую из этих строк, она отбрасывается. Полезно для избежания недружественных генератору трафика элементов, таких как ссылки "Твитнуть это!" или ссылки на файлы изображений.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' Вы угадали — это user-agent, который наш безголовый браузер передаёт веб-серверу. Можете оставить по умолчанию, но можете и изменить. Настоятельно рекомендую использовать распространённый/валидный, иначе вас быстро ограничат по скорости.
Единственное, что вам нужно и возможно у вас нет — это requests. Установите с помощью
sudo pip install requests
Сначала создайте файл конфигурации:
cp config.py.template config.py
Запустите генератор:
python gen.py
Чтобы узнать больше подробностей о том, что происходит под капотом, измените переменную Debug в config.py с False на True. Это даст следующий вывод...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
Последний URL показывает хороший пример того, когда конкретный URL вызывает ошибку. Мы просто добавляем его в наш массив config.blacklist в памяти и продолжаем просмотр. Это предотвращает возврат известного плохого URL в очередь.