
Сканирует домены, чтобы определить, какую сеть доставки контента (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 Detection для получения всех CDN для каждого доменаChef запускает анализ, чтобы установить булево значение has_cdn, если он обнаруживает,
что домен имеет CDN, после чего возвращает список доменов в файл запускаcdn_config.py.Изначальной целью этого инструмента было автоматическое определение того, можно ли использовать домен, использующий CDN, для фронтинга. Из-за значительных накладных расходов на обнаружение фронтинга мы изменили направление разработки этого инструмента, сделав его исключительно инструментом обнаружения CDN. Мы используем нашу wiki, чтобы дополнительно описать, что такое Domain Fronting, наши исследовательские заметки, проектные решения и плейбуки для фронтинга конкретных доменов. Если вы найдёте дополнительные домены, пригодные для фронтинга, или какие-либо недостатки в текущих плейбуках, пожалуйста, рассмотрите возможность внести вклад!
Дополнительная информация находится на нашей странице wiki. Мы призываем вас оставлять запросы на функции или вносить вклад в виде всего, что вы хотели бы видеть добавленным в проект или wiki.
Это может быть любое из следующего:
Мы приветствуем вклад! Пожалуйста, см. CONTRIBUTING.md для
подробностей.
Этот проект находится во всемирном общественном достоянии.
Этот проект находится в общественном достоянии в Соединённых Штатах, а авторские и смежные права на произведение во всём мире отказываются через CC0 1.0 Universal public domain dedication.
Все вклады в этот проект будут выпущены под посвящением CC0. Отправляя pull request, вы соглашаетесь соблюдать этот отказ от авторских прав.