منشئ حركة مرور HTTP/S "عضوي" سريع وقذر.
مجرد نص بايثون بسيط (سيئ الكتابة) يقوم "بتصفح" الإنترنت بلا هدف من خلال البدء من ROOT_URLS
المحددة مسبقًا و"النقر" عشوائيًا على الروابط الموجودة على الصفحات حتى يتم استيفاء الحد الأقصى المحدد مسبقًا MAX_DEPTH
.
لقد قمت بإنشاء هذا كمولد ضوضاء لاستخدامه في محاكاة الاستجابة للحوادث / الدفاع عن الشبكة. المشكلة الوحيدة هي أن بيئة المحاكاة الخاصة بي تستخدم العديد من أجهزة IDS/IPS/NGFW التي لن تمر وتسجيل عمليات TCPreplays البسيطة لحركة المرور المعلبة. كنت بحاجة إلى أن تكون حركة المرور عضوية قدر الإمكان، بحيث تحاكي بشكل أساسي المستخدمين الحقيقيين الذين يتصفحون الويب.
تم اختباره على 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).......'
لقد خمنت ذلك، يقوم وكيل المستخدم الخاص بالمتصفح بدون رأس بتسليمه إلى خادم الويب. ربما يمكنك تركه مضبوطًا على الإعداد الافتراضي، ولكن لا تتردد في تغييره. أود أن أقترح بشدة استخدام واحد مشترك/صالح وإلا فمن المحتمل أن تحصل على سعر محدود سريعًا.
الشيء الوحيد الذي تحتاجه وقد لا يكون لديك هو 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 السيئ المعروف من العودة إلى قائمة الانتظار.