
Escaneia domínios para identificar qual Content Delivery Network (CDN) eles usam, por meio de fingerprinting de cabeçalhos HTTPS, registros CNAME e dados WHOIS, com saída em JSON e suporte a módulos.
findcdn é uma ferramenta que pode escanear e detectar o tipo de
Content Distribution Network (CDN)
que um domínio utiliza. findcdn pode salvar resultados em um arquivo, ser usado como módulo, ou
apenas exibir na saída padrão.
findcdn ajuda os usuários da ferramenta a determinar com precisão qual CDN um domínio está
utilizando. A lista de domínios suportados está listada no arquivo
cdn_config.py
no repositório. A biblioteca pode ser implementada como uma ferramenta autônoma ou
como um módulo importável em seu projeto. Em ambos os casos, os resultados podem ser gravados
em um arquivo de saída.
findcdn requer Python 3.7+. Python 2 não é suportado.
findcdn
pode ser instalado como um módulo usando pip e o arquivo requirements.txt no
repositório.
findcdn pode ser instalado via pip:
pip install --requirement requirements.txt
Ele pode então ser executado diretamente:
findcdn list github.com
Alternativamente, você pode instalar rapidamente em qualquer projeto com:
pip install git+https://github.com/cisagov/findcdn.git
Nota: É recomendado usar um ambiente virtual Python para instalar módulos e manter seu ambiente limpo. Se você deseja fazer isso, você precisará do pyenv e do plugin pyenv-virtualenv antes de instalar o módulo.
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 Mostra esta mensagem.
--version Mostra a versão atual.
-o FILE --output=FILE Se especificado, então o arquivo de saída JSON será
criado no valor especificado.
-v --verbose Inclui declarações de impressão adicionais.
--all Inclui domínios com e sem CDN
na saída.
-d --double Executa as verificações duas vezes para aumentar a precisão.
-t --threads=<thread_count> Número de threads, caso contrário usa o padrão.
--timeout=<timeout> Duração máxima em segundos para esperar que um domínio
conclua o processamento, caso contrário usa o padrão.
--user_agent=<user_agent> Define o user agent a ser usado, caso contrário
usa o padrão.
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.
Como findcdn pode ser instalado como um módulo, seu poder de detecção de CDN pode ser
chamado e implementado em qualquer projeto. Primeiro, importe findcdn em seu
projeto, como mostrado acima. Em seguida, passe uma lista de domínios para analisar. Após
o processamento, o programa retornará um objeto JSON contendo os domínios
inseridos e as CDNs que eles usam.
A forma como findcdn funciona é determinada pelas opções passadas; as opções
possíveis atuais e um exemplo estão escritos abaixo para sua conveniência:
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 é dividido em três seções:
Chef usará a biblioteca de Detecção de CDN para obter todas as CDNs de cada domínioChef então executa uma análise para definir o valor booleano has_cdn se detectar
que um domínio possui uma CDN, então retorna a lista de domínios para o arquivo principalcdn_config.py.O propósito original desta ferramenta era detectar automaticamente se um domínio que usa uma CDN é frontável. Devido à sobrecarga significativa para detecção de fronting, nós redirecionamos o desenvolvimento desta ferramenta para ser exclusivamente uma ferramenta de detecção de CDN. Usamos nossa wiki para descrever melhor o que é Domain Fronting, nossas notas de pesquisa, decisões de design e playbooks para fronting de domínios específicos. Se você encontrar quaisquer domínios frontáveis adicionais ou quaisquer falhas nos playbooks atuais, por favor considere contribuir!
Há mais informações localizadas em nossa página wiki. Encorajamos você a fazer solicitações de recursos ou contribuir com qualquer coisa que você gostaria de ver adicionada ao projeto ou wiki.
Isso pode ser qualquer um dos seguintes:
Acolhemos contribuições! Por favor veja CONTRIBUTING.md para
detalhes.
Este projeto está em domínio público mundial.
Este projeto está em domínio público dentro dos Estados Unidos, e direitos autorais e direitos relacionados na obra mundialmente são renunciados através da CC0 1.0 Universal public domain dedication.
Todas as contribuições para este projeto serão liberadas sob a dedicação CC0. Ao enviar um pull request, você está concordando em cumprir com esta renúncia de interesse de direitos autorais.