
डोमेन को स्कैन करके यह पहचानता है कि वे कौन सा Content Delivery Network (CDN) उपयोग करते हैं, HTTPS हेडर, CNAME रिकॉर्ड और WHOIS डेटा की फिंगरप्रिंटिंग करके, JSON आउटपुट और मॉड्यूल समर्थन के साथ।
findcdn, एक ऐसा टूल है जो किसी डोमेन द्वारा उपयोग किए जाने वाले
Content Distribution Network (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 plugin की आवश्यकता होगी।
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 Detection लाइब्रेरी का उपयोग करेगाChef एक विश्लेषण चलाता है ताकि यदि यह पता चले कि किसी डोमेन में CDN है तो बूलियन has_cdn मान सेट कर सके और फिर रनर फ़ाइल को डोमेन की सूची लौटाता हैcdn_config.py में परिभाषित किसी भी CDN की पहचान करने के लिए एक फिंगरप्रिंट स्कैन चलाता है।इस टूल का मूल उद्देश्य स्वचालित रूप से यह पता लगाना था कि CDN का उपयोग करने वाला कोई डोमेन frontable है या नहीं। fronting detection के लिए महत्वपूर्ण ओवरहेड के कारण, हमने इस टूल के विकास को विशेष रूप से एक CDN detection टूल बनाने के लिए बदल दिया। हम Domain Fronting क्या है, हमारे शोध नोट्स, डिज़ाइन निर्णय, और विशिष्ट डोमेन को fronting करने के लिए playbooks का और अधिक वर्णन करने के लिए अपनी wiki का उपयोग करते हैं। यदि आप कोई अतिरिक्त frontable डोमेन या वर्तमान playbooks में कोई खामी पाते हैं, तो कृपया योगदान देने! पर विचार करें।
अधिक जानकारी हमारे wiki पृष्ठ पर स्थित है। हम आपको प्रोजेक्ट या wiki में जोड़े जाने के इच्छुक किसी भी फ़ीचर का अनुरोध करने या योगदान देने के लिए प्रोत्साहित करते हैं।
यह निम्नलिखित में से कोई भी हो सकता है:
हम योगदान का स्वागत करते हैं! विवरण के लिए कृपया CONTRIBUTING.md देखें।
यह प्रोजेक्ट विश्वव्यापी सार्वजनिक डोमेन में है।
यह प्रोजेक्ट संयुक्त राज्य अमेरिका के भीतर सार्वजनिक डोमेन में है, और कार्य में विश्वव्यापी कॉपीराइट और संबंधित अधिकार CC0 1.0 Universal public domain dedication के माध्यम से त्याग दिए गए हैं।
इस प्रोजेक्ट में सभी योगदान CC0 dedication के अंतर्गत जारी किए जाएंगे। एक pull request सबमिट करके, आप कॉपीराइट हित के इस त्याग का पालन करने के लिए सहमत होते हैं।