Быстрый и грязный генератор «органического» HTTP/S-трафика.
Просто простой (плохо написанный) скрипт Python, который бесцельно «просматривает» Интернет, начиная с заранее определенных ROOT_URLS
и случайным образом «щелкая» ссылки на страницах, пока не будет достигнут заранее определенный MAX_DEPTH
.
Я создал это как генератор шума для моделирования реагирования на инциденты/защиты сети. Единственная проблема заключается в том, что моя среда моделирования использует несколько устройств IDS/IPS/NGFW, которые не будут передавать и регистрировать простые TCP-воспроизведения стандартного трафика. Мне нужно было, чтобы трафик был максимально органичным, по существу имитируя реальных пользователей, просматривающих Интернет.
Протестировано на минимальной версии Ubuntu 14.04 и 16.04, но должно работать в любой системе с установленным 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", etc...]
Черный список строк, по которым мы проверяем каждую ссылку. Если ссылка содержит какую-либо строку из этого списка, она отбрасывается. Полезно, чтобы избежать действий, которые не подходят для генератора трафика, например «Напишите это в Твиттере!» ссылки или ссылки на файлы изображений.
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......'
Как вы уже догадались, пользовательский агент нашего headless-браузера передает веб-серверу. Вероятно, вы можете оставить значение по умолчанию, но не стесняйтесь его изменить. Я настоятельно рекомендую использовать общий/действительный, иначе вы, скорее всего, быстро получите ограничение по скорости.
Единственное, что вам нужно, но может и не быть, — это 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-адреса в очередь.