
يقوم بفحص النطاقات لتحديد شبكة توصيل المحتوى (CDN) التي تستخدمها من خلال بصمة رؤوس HTTPS وسجلات CNAME وبيانات WHOIS، مع إخراج JSON ودعم الوحدات.
findcdn، هي أداة يمكنها فحص واكتشاف نوع
شبكة توزيع المحتوى (CDN)
التي يستخدمها النطاق. يمكن لـ findcdn حفظ النتائج في ملف، أو استخدامها كوحدة نمطية، أو
مجرد إخراجها إلى stdout.
تساعد findcdn مستخدمي الأداة على تحديد أي CDN يستخدمه النطاق بدقة. قائمة النطاقات المدعومة مدرجة في
ملف cdn_config.py
في المستودع. يمكن تنفيذ المكتبة كأداة مستقلة أو
كوحدة نمطية قابلة للاستيراد في مشروعك. في كلتا الحالتين، يمكن كتابة النتائج
إلى ملف إخراج.
تتطلب findcdn Python 3.7+. Python 2 غير مدعوم.
يمكن تثبيت findcdn
كوحدة نمطية باستخدام pip وملف requirements.txt في
المستودع.
يمكن تثبيت findcdn عبر pip:
pip install --requirement requirements.txt
يمكن بعد ذلك تشغيلها مباشرة:
findcdn list github.com
بدلاً من ذلك يمكنك التثبيت بسرعة في أي مشروع باستخدام:
pip install git+https://github.com/cisagov/findcdn.git
ملاحظة: يوصى باستخدام بيئة Python افتراضية لتثبيت الوحدات النمطية والحفاظ على بيئتك نظيفة. إذا كنت ترغب في ذلك، ستحتاج إلى pyenv و إضافة pyenv-virtualenv قبل تثبيت الوحدة النمطية.
findcdn file <fileIn> [options]
findcdn list <domain>... [options]
findcdn (-h | --help)
findcnd -h
findcdn file domains.txt -o output_cdn.txt -t 17 -d
findcdn list dhs.gov cisa.gov -o output_cnd.txt -v
findcdn list cisa.gov
-h --help Show this message.
--version Show the current version.
-o FILE --output=FILE If specified, then the JSON output file will be
created at the specified value.
-v --verbose Includes additional print statements.
--all Includes domains with and without a CDN
in output.
-d --double Run the checks twice to increase accuracy.
-t --threads=<thread_count> Number of threads, otherwise use default.
--timeout=<timeout> Max duration in seconds to wait for a domain to
conclude processing, otherwise use default.
--user_agent=<user_agent> Set the user agent to use, otherwise
use default.
user2@ubuntu:~$ findcdn list asu.edu -t 7 --double
Using 7 threads.
[Pending: 0 jobs]==[Threads: 2]: 100%|███████████████████████████████| 2/2 [00:00<00:00, 2.22it/s]
{
"date": "06/19/2020, 13:00:38",
"CDN_count": "1",
"domains": {
"asu.edu": {
"IP": "'104.16.50.14'",
"cdns": "'.cloudflare.com'",
"cdns_by_names": "'Cloudflare'"
}
}
}
Domain processing completed.
1 domains had CDN's out of 1.
نظرًا لأنه يمكن تثبيت findcdn كوحدة نمطية، يمكن استدعاء قدرتها على اكتشاف CDN
وتنفيذها في أي مشروع. أولاً، قم باستيراد findcdn إلى
مشروعك، كما هو موضح أعلاه. ثم مرر لها قائمة بالنطاقات لتحليلها. بعد
المعالجة، سيعيد البرنامج كائن JSON يحتوي على النطاقات
المُدخلة وشبكات CDN التي تستخدمها.
يتم تحديد طريقة عمل findcdn من خلال الخيارات المُمررة؛ الخيارات الممكنة الحالية
ومثال مكتوب أدناه لراحتك:
findcdn.main(
domain_list: List[str], # List of domains to search
output_path: str = None, # if included, output results to JSON
verbose: bool = False, # Verbose mode (more printing!)
all_domains: bool = False, # Includes domains that dont have cdn's in the output
interactive: bool = False, # Includes a progress bar (normally used for command line)
double_in: bool = False, #D ouble the number of tries on a domain to increase accuracy
threads: int = THREADS, # Number of threads to use
timeout: int = TIMEOUT, # How long to wait on a domain
user_agent: str = USER_AGENT, # User Agent to use
)
import findcdn
import json
domains = ['google.com', 'cisa.gov', 'censys.io', 'yahoo.com', 'pbs.org', 'github.com']
resp_json = findcdn.main(domains, output_path="output.json", double_in=True, threads=23)
dumped_json = json.loads(resp_json)
for domain in dumped_json['domains']:
print(f"{domain} has CDNs:\n {dumped_json['domains'][domain]['cdns']}")
تنقسم findcdn إلى ثلاثة أقسام:
Chef مكتبة اكتشاف CDN للحصول على جميع شبكات CDN لكل نطاقChef بتحليل لتعيين قيمة has_cdn المنطقية إذا اكتشف
أن النطاق لديه CDN ثم يعيد قائمة النطاقات إلى ملف التشغيلcdn_config.py.كان الغرض الأصلي لهذه الأداة هو الكشف التلقائي عما إذا كان النطاق الذي يستخدم CDN قابلاً للتوجيه الأمامي. نظرًا للنفقات الكبيرة لاكتشاف التوجيه الأمامي، قمنا بتحويل تطوير هذه الأداة ليكون حصريًا أداة اكتشاف CDN. نستخدم ويكي لوصف المزيد حول ما هو Domain Fronting، وملاحظاتنا البحثية، وقرارات التصميم، وأدلة التشغيل لتوجيه نطاقات محددة. إذا وجدت أي نطاقات إضافية قابلة للتوجيه الأمامي أو أي عيوب في أدلة التشغيل الحالية، يرجى التفكير في المساهمة!
توجد مزيد من المعلومات على صفحة الويكي الخاصة بنا. نشجعك على تقديم طلبات الميزات أو المساهمة بأي شيء ترغب في رؤيته مضافًا إلى المشروع أو الويكي.
يمكن أن يكون هذا أيًا مما يلي:
نرحب بالمساهمات! يرجى الاطلاع على CONTRIBUTING.md للحصول على
التفاصيل.
هذا المشروع في الملكية العامة العالمية.
هذا المشروع في الملكية العامة داخل الولايات المتحدة، و حقوق النشر والحقوق ذات الصلة في العمل عالميًا متنازل عنها من خلال إهداء CC0 1.0 Universal للملكية العامة.
سيتم إصدار جميع المساهمات في هذا المشروع بموجب إهداء CC0. من خلال تقديم طلب سحب، فإنك توافق على الامتثال لهذا التنازل عن مصلحة حقوق النشر.