
Alta velocidad/Bajo costo CommonCrawl RegExp en Node.js
WARCannon fue construido para simplificar y abaratar el proceso de 'grep en internet'.
Con WARCannon, puedes:
WARCannon aprovecha un uso inteligente de las tecnologías de AWS para escalar horizontalmente a cualquier capacidad, minimizar costos mediante flotas spot y transferencia de datos en la misma región, extraer de S3 a velocidades increíbles (hasta 100Gbps por nodo), paralelizar en cientos de núcleos de CPU, reportar estado a través de DynamoDB y CloudFront, y almacenar resultados mediante S3.
En total, WARCannon puede procesar múltiples patrones de expresiones regulares en 400TB en unas pocas horas por alrededor de $30.
La forma más rápida y sencilla de empezar es usar AWS CloudShell. Simplemente pega esta línea:
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/master/cloudshell/deploy.sh)
Si quieres usar una rama que no sea master de WARCannon, simplemente escribe:
export GIT_BRANCH=branch_name
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/$GIT_BRANCH/cloudshell/deploy.sh)
Nota: El despliegue en CloudShell utiliza almacenamiento efímero, lo que significa que los patrones de expresiones regulares personalizados se perderán cuando se cierre CloudShell. Si vas a usar WARCannon con frecuencia, recomiendo usar la 'Instalación Local' a continuación.
WARCannon requiere que tengas instalado lo siguiente:
ProTip: Para mantener las cosas limpias y distintas de otras cosas que puedas tener en AWS, se RECOMIENDA ENCARECIDAMENTE que despliegues WARCannon en una cuenta nueva. Puedes crear una nueva cuenta fácilmente desde la consola de 'Organizations' en AWS. Con 'RECOMENDADO ENCARECIDAMENTE', quiero decir 'seriamente no instales esto junto a otras cosas'.
Primero, clona el repositorio y copia la configuración de ejemplo.
$ git clone [email protected]:c6fc/warcannon.git
$ cd warcannon
warcannon$ cp settings.json.sample settings.json
Edita settings.json a tu gusto:
Configuraciones obligatorias
nodeInstanceType: Un array de tipos de instancia para usar en procesamiento paralelo. Los tipos 'c' ofrecen la mejor relación calidad-precio para este propósito, y se puede usar cualquier tamaño. ["c5n.18xlarge"] es el valor recomendado para campañas reales.nodeCapacity: El número de nodos a solicitar durante el procesamiento paralelo. Los nodos resultantes serán una distribución arbitraria de los nodeInstanceTypes que especifiques.nodeParallelism: El número de WARCs simultáneos a procesar por vCPU. 2 es un buen número aquí. Si los nodos tienen RAM insuficiente para ejecutarse a este nivel de paralelismo (como se podría encontrar con instancias tipo 'c'), se ejecutarán al paralelismo seguro más alto en su lugar.nodeMaxDuration: La vida útil máxima de los nodos de cómputo en segundos. Los nodos se terminarán automáticamente después de este tiempo si el trabajo aún no ha finalizado. El valor predeterminado es 24 horas.Configuraciones opcionales (déjalas completamente fuera si no se usan)
sshKeyName: El nombre de una clave SSH de EC2 que ya existe en us-east-1.allowSSHFrom: Una máscara CIDR para permitir SSH desde. Típicamente será <yourpublicip>/32Para instalar, ejecuta esto:
$ npm install
$ npm link
$ warcannon deploy
Ejecutar una campaña en WARCannon utiliza un flujo de trabajo simple y fácil de seguir que se puede describir mejor en estos pocos pasos:
warcannon deploywarcannon testLocal -swarcannon testwarcannon list 2022warcannon populate 2022-21warcannon firewarcannon syncResultsContinúa leyendo para una comprensión más detallada de cada paso.
WARCannon se alimenta de Common Crawl a través del programa AWS Open Data. Common Crawl es único en que los datos recuperados por sus spiders no solo capturan texto de sitios web, sino también otro contenido basado en texto como JavaScript, TypeScript, HTML completo, CSS, etc. Al construir expresiones regulares adecuadas capaces de identificar componentes únicos, los investigadores pueden identificar sitios web por las tecnologías que utilizan, y hacerlo sin tocar nunca el sitio web ellos mismos. El problema es que esto requiere analizar cientos de terabytes de datos, lo cual es una tarea difícil sin importar los recursos que tengas a tu disposición. ¡Afortunadamente WARCannon tiene varias herramientas que puedes usar para lograrlo!
Grep en internet no es para los débiles de corazón, pero empezar con un colador efectivo es el primer paso. WARCannon lo apoya permitiendo la verificación local de expresiones regulares contra datos reales de Common Crawl. Primero, abre lambda_functions/warcannon/matches.js y modifica el objeto regex_patterns para incluir las expresiones regulares que deseas usar en formato name: pattern. Aquí hay un ejemplo del conjunto de búsqueda predeterminado:
exports.regex_patterns = {
"access_key_id": /(\'A|"A)(SIA|KIA|IDA|ROA)[JI][A-Z0-9]{14}[AQ][\'"]/g,
};
Las cadenas que coincidan con esta expresión se guardarán bajo la clave correspondiente en los resultados; access_key_id en este caso. ProTip: Usa RegExr con el formato 'JavaScript' para construir y probar expresiones regulares contra coincidencias conocidas.
También tienes la opción de capturar solo resultados de dominios especificados. Para hacerlo, simplemente completa el array domains con los FQDN que desees incluir. Se recomienda dejar esto vacío [] ya que casi nunca vale la pena (el esfuerzo de procesamiento ahorrado es muy pequeño), pero puede ser útil en algunos casos específicos.
exports.domains = ["example1.com", "example2.com"];
Una vez que matches.js esté poblado, ejecuta el siguiente comando:
warcannon$ warcannon testLocal -s
Opcionalmente, puedes agregar una ruta a un WARC en el bucket S3 commoncrawl si lo deseas, pero se usará un valor predeterminado hardcodeado en caso contrario.
WARCannon procesará el archivo WARC en flujo (o lo descargará por completo si omites -s) para encontrar tus coincidencias configuradas. WARCannon guardará los resultados en la carpeta ~/.warcannon/ cuando interrumpas con ctrl+c o cuando termine el procesamiento. Esto facilita probar coincidencias comunes muy rápidamente con un ancho de banda mínimo.
Además de todo lo demás, WARCannon intentará evaluar el costo total de cómputo de tus expresiones regulares cuando se ejecuten localmente. De esta manera, podrás saber si una expresión regular determinada impactará significativamente el rendimiento antes de ejecutar tu campaña.
