
Haute vitesse / Faible coût CommonCrawl RegExp sur Node.js
WARCannon a été conçu pour simplifier et réduire le coût du processus de 'grep sur Internet'.
Avec WARCannon, vous pouvez :
WARCannon exploite une utilisation intelligente des technologies AWS pour passer à l'échelle horizontalement à n'importe quelle capacité, minimiser les coûts grâce aux flottes spot et au transfert de données dans la même région, extraire des données de S3 à des vitesses incroyables (jusqu'à 100 Gbps par nœud), paralléliser sur des centaines de cœurs CPU, rapporter l'état via DynamoDB et CloudFront, et stocker les résultats via S3.
Au total, WARCannon peut traiter plusieurs expressions régulières sur 400 To en quelques heures pour environ 30 $.
Le moyen le plus rapide et le plus simple de commencer est d'utiliser AWS CloudShell. Collez simplement cette commande en une ligne :
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/master/cloudshell/deploy.sh)
Si vous souhaitez utiliser une branche non-master de WARCannon, tapez simplement :
export GIT_BRANCH=branch_name
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/$GIT_BRANCH/cloudshell/deploy.sh)
Remarque : Le déploiement via CloudShell utilise un stockage éphémère, ce qui signifie que les motifs d'expressions régulières personnalisés seront perdus lorsque CloudShell se fermera. Si vous prévoyez d'utiliser WARCannon fréquemment, je vous recommande d'utiliser l'installation locale ci-dessous.
WARCannon nécessite que vous ayez installé les éléments suivants :
Astuce : Pour garder les choses propres et distinctes d'autres éléments que vous pourriez avoir dans AWS, il est FORTEMENT recommandé de déployer WARCannon dans un nouveau compte. Vous pouvez créer un nouveau compte facilement depuis la console 'Organizations' dans AWS. Par 'FORTEMENT recommandé', j'entends 'sérieusement, n'installez pas ceci à côté d'autres choses'.
D'abord, clonez le dépôt et copiez les paramètres d'exemple.
$ git clone [email protected]:c6fc/warcannon.git
$ cd warcannon
warcannon$ cp settings.json.sample settings.json
Modifiez settings.json à votre goût :
Paramètres requis
nodeInstanceType : Un tableau de types d'instances à utiliser pour le traitement parallèle. Les types 'c' sont les meilleurs pour cela, et n'importe quelle taille peut être utilisée. ["c5n.18xlarge"] est la valeur recommandée pour les vraies campagnes.nodeCapacity : Le nombre de nœuds à demander lors du traitement parallèle. Les nœuds résultants seront une distribution arbitraire des nodeInstanceTypes que vous spécifiez.nodeParallelism : Le nombre de WARCs simultanés à traiter par vCPU. 2 est un bon nombre ici. Si les nœuds n'ont pas assez de RAM pour fonctionner à ce niveau de parallélisme (comme avec les instances de type 'c'), ils fonctionneront au parallélisme sûr le plus élevé à la place.nodeMaxDuration : La durée de vie maximale des nœuds de calcul en secondes. Les nœuds seront automatiquement terminés après ce temps si le travail n'est pas encore terminé. La valeur par défaut est de 24 heures.Paramètres optionnels (laissez-les complètement de côté si non utilisés)
sshKeyName : Le nom d'une clé SSH EC2 qui existe déjà dans us-east-1.allowSSHFrom : Un masque CIDR pour autoriser SSH. Typiquement ce sera <votreipublique>/32Pour installer, exécutez ceci :
$ npm install
$ npm link
$ warcannon deploy
Lancer une campagne dans WARCannon utilise un flux de travail simple et facile à suivre, qui peut être décrit en quelques étapes :
warcannon deploywarcannon testLocal -swarcannon testwarcannon list 2022warcannon populate 2022-21warcannon firewarcannon syncResultsLisez la suite pour une compréhension plus détaillée de chaque étape.
WARCannon est alimenté par Common Crawl via le programme AWS Open Data. Common Crawl est unique en ce sens que les données récupérées par leurs spiders capturent non seulement le texte du site web, mais aussi d'autres contenus textuels comme JavaScript, TypeScript, HTML complet, CSS, etc. En construisant des expressions régulières appropriées capables d'identifier des composants uniques, les chercheurs peuvent identifier les sites web par les technologies qu'ils utilisent, et ce sans jamais toucher au site web lui-même. Le problème est que cela nécessite d'analyser des centaines de téraoctets de données, ce qui est un défi de taille, quels que soient les ressources dont vous disposez. Heureusement, WARCannon propose plusieurs outils pour y parvenir !
Faire un grep sur Internet n'est pas pour les âmes sensibles, mais commencer par un tamis efficace est la première étape. WARCannon facilite cela en permettant la vérification locale des expressions régulières sur des données réelles de Common Crawl. D'abord, ouvrez lambda_functions/warcannon/matches.js et modifiez l'objet regex_patterns pour inclure les expressions régulières que vous souhaitez utiliser au format name: pattern. Voici un exemple de l'ensemble de recherche par défaut :
exports.regex_patterns = {
"access_key_id": /(\'A|"A)(SIA|KIA|IDA|ROA)[JI][A-Z0-9]{14}[AQ][\'"]/g,
};
Les chaînes correspondant à cette expression seront sauvegardées sous la clé correspondante dans les résultats ; access_key_id dans ce cas. Astuce : Utilisez RegExr avec le format 'JavaScript' pour construire et tester des expressions régulières sur des correspondances connues.
Vous avez également la possibilité de ne capturer que les résultats de domaines spécifiés. Pour ce faire, il suffit de remplir le tableau domains avec les FQDN que vous souhaitez inclure. Il est recommandé de laisser ce tableau vide [] car cela n'est presque jamais rentable (l'effort de traitement économisé est très faible), mais cela peut être utile dans certains cas particuliers.
exports.domains = ["example1.com", "example2.com"];
Une fois que le fichier matches.js est rempli, exécutez la commande suivante :
warcannon$ warcannon testLocal -s
Vous pouvez éventuellement ajouter un chemin vers un WARC dans le bucket S3 commoncrawl si vous le souhaitez, mais une valeur par défaut codée en dur sera utilisée sinon.
WARCannon traitera le fichier WARC en streaming (ou le téléchargera entièrement si vous omettez -s) pour trouver les correspondances configurées. WARCannon sauvegardera les résultats dans le dossier ~/.warcannon/ lorsque vous interromprez avec ctrl+c ou lorsque le traitement se termine. Cela permet de tester rapidement les correspondances courantes avec un minimum de bande passante.