
Escanea dominios para identificar qué Red de Entrega de Contenido (CDN) utilizan mediante la huella digital de encabezados HTTPS, registros CNAME y datos WHOIS, con salida JSON y soporte de módulos.
findcdn, es una herramienta que puede escanear y detectar el tipo de
Content Distribution Network (CDN)
que utiliza un dominio. findcdn puede guardar los resultados en un archivo, usarse como módulo, o
simplemente mostrar la salida en stdout.
findcdn ayuda a los usuarios de la herramienta a determinar con precisión qué CDN está
utilizando un dominio. La lista de dominios soportados se encuentra en el
archivo cdn_config.py
en el repositorio. La biblioteca puede implementarse como una herramienta independiente o
como un módulo importable en tu proyecto. En ambos casos, los resultados pueden escribirse
en un archivo de salida.
findcdn requiere Python 3.7+. Python 2 no es compatible.
findcdn
puede instalarse como módulo usando pip y el archivo requirements.txt del
repositorio.
findcdn puede instalarse mediante pip:
pip install --requirement requirements.txt
Luego puede ejecutarse directamente:
findcdn list github.com
Alternativamente, puedes instalarlo rápidamente en cualquier proyecto con:
pip install git+https://github.com/cisagov/findcdn.git
Nota: Se recomienda usar un entorno virtual de Python para instalar módulos y mantener tu entorno limpio. Si deseas hacerlo, necesitarás pyenv y el plugin pyenv-virtualenv antes de instalar el 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 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.
Dado que findcdn puede instalarse como módulo, su capacidad de detección de CDN puede
invocarse e implementarse en cualquier proyecto. Primero, importa findcdn en tu
proyecto, como se muestra arriba. Luego, pásale una lista de dominios para analizar. Tras
el procesamiento, el programa devolverá un objeto JSON que contiene los dominios
introducidos y las CDN que utilizan.
La forma en que funciona findcdn se determina mediante las opciones pasadas; las opciones
posibles actuales y un ejemplo se escriben a continuación para tu comodidad:
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 está dividido en tres secciones:
Chef usará la biblioteca de CDN Detection para obtener todas las CDN de cada dominioChef luego ejecuta un análisis para establecer el valor booleano has_cdn si detecta
que un dominio tiene una CDN, y luego devuelve la lista de dominios al archivo ejecutorcdn_config.py.El propósito original de esta herramienta era detectar automáticamente si un dominio que usa una CDN es frontable. Debido a la importante sobrecarga que supone la detección de fronting, cambiamos el desarrollo de esta herramienta para que fuera exclusivamente una herramienta de detección de CDN. Usamos nuestra wiki para describir con más detalle qué es el Domain Fronting, nuestras notas de investigación, decisiones de diseño y guías para el fronting de dominios específicos. Si encuentras dominios frontables adicionales o cualquier fallo en las guías actuales, por favor considera ¡contribuir!
Hay más información en nuestra página wiki. Te animamos a solicitar funcionalidades o contribuir con cualquier cosa que te gustaría ver añadida al proyecto o a la wiki.
Esto puede ser cualquiera de las siguientes cosas:
¡Aceptamos contribuciones! Consulta CONTRIBUTING.md para
más detalles.
Este proyecto está en el dominio público mundial.
Este proyecto está en el dominio público dentro de los Estados Unidos, y los derechos de autor y derechos relacionados con la obra en todo el mundo se renuncian mediante la dedicación al dominio público CC0 1.0 Universal.
Todas las contribuciones a este proyecto se publicarán bajo la dedicación CC0. Al enviar una pull request, aceptas cumplir con esta renuncia al interés de derechos de autor.