
Быстрый и «грязный» генератор «органического» 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, который наш headless-браузер передаёт веб-серверу. Вероятно, можно оставить значение по умолчанию, но не стесняйтесь изменить его. Я настоятельно рекомендую использовать распространённый/валидный 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 в очередь.