
RegExp de CommonCrawl de alta velocidade / baixo custo em Node.js
O WARCannon foi criado para simplificar e baratear o processo de 'grep na internet'.
Com o WARCannon, você pode:
WARCannon aproveita o uso inteligente de tecnologias AWS para escalar horizontalmente para qualquer capacidade, minimizar custos por meio de frotas spot e transferência de dados na mesma região, extrair do S3 em velocidades incríveis (até 100 Gbps por nó), paralelizar em centenas de núcleos de CPU, relatar status via DynamoDB e CloudFront e armazenar resultados via S3.
No geral, o WARCannon pode processar vários padrões de expressão regular em 400 TB em algumas horas por cerca de $30.
A maneira mais rápida e fácil de começar é usar o AWS CloudShell. Basta colar este one-liner:
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/master/cloudshell/deploy.sh)
Se quiser usar uma branch que não seja a master do WARCannon, basta digitar:
export GIT_BRANCH=branch_name
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/$GIT_BRANCH/cloudshell/deploy.sh)
Nota: A implantação via CloudShell usa armazenamento efêmero, o que significa que os padrões regex personalizados serão perdidos quando o CloudShell for encerrado. Se você for usar o WARCannon com frequência, recomendo usar a 'Instalação Local' abaixo.
O WARCannon requer que você tenha os seguintes itens instalados:
Dica profissional: Para manter as coisas organizadas e distintas de outras coisas que você possa ter na AWS, é FORTEMENTE recomendado implantar o WARCannon em uma nova conta. Você pode criar uma nova conta facilmente no console 'Organizations' da AWS. Por 'FORTEMENTE recomendado', quero dizer 'seriamente, não instale isso perto de outras coisas'.
Primeiro, clone o repositório e copie as configurações de exemplo.
$ git clone [email protected]:c6fc/warcannon.git
$ cd warcannon
warcannon$ cp settings.json.sample settings.json
Edite settings.json a gosto:
Configurações obrigatórias
nodeInstanceType: Um array de tipos de instância a serem usados para processamento paralelo. Tipos 'c' oferecem o melhor custo-benefício para esse propósito, e qualquer tamanho pode ser usado. ["c5n.18xlarge"] é o valor recomendado para campanhas reais.nodeCapacity: O número de nós a serem solicitados durante o processamento paralelo. Os nós resultantes serão uma distribuição arbitrária dos nodeInstanceTypes que você especificar.nodeParallelism: O número de WARCs simultâneos a serem processados por vCPU. 2 é um bom número aqui. Se os nós tiverem RAM insuficiente para executar nesse nível de paralelismo (como pode acontecer com instâncias do tipo 'c'), eles serão executados no maior paralelismo seguro.nodeMaxDuration: A vida útil máxima dos nós de computação em segundos. Os nós serão automaticamente encerrados após esse tempo se o job ainda não tiver sido concluído. O valor padrão é 24 horas.Configurações opcionais (deixe-as de fora completamente se não forem usadas)
sshKeyName: O nome de uma chave SSH EC2 que já existe em us-east-1.allowSSHFrom: Uma máscara CIDR para permitir SSH. Normalmente será <yourpublicip>/32Para instalar, execute:
$ npm install
$ npm link
$ warcannon deploy
Executar uma campanha no WARCannon usa um fluxo de trabalho simples e fácil de seguir que pode ser melhor descrito nestas poucas etapas:
warcannon deploywarcannon testLocal -swarcannon testwarcannon list 2022warcannon populate 2022-21warcannon firewarcannon syncResultsContinue lendo para um entendimento mais detalhado de cada etapa.
O WARCannon é alimentado pelo Common Crawl através do programa AWS Open Data. O Common Crawl é único porque os dados recuperados por seus spiders não apenas capturam o texto do site, mas também outros conteúdos baseados em texto, como JavaScript, TypeScript, HTML completo, CSS, etc. Ao construir Expressões Regulares adequadas capazes de identificar componentes únicos, os pesquisadores podem identificar sites pelas tecnologias que usam, e fazer isso sem nunca tocar no próprio site. O problema é que isso requer a análise de centenas de terabytes de dados, o que é uma tarefa difícil, independentemente dos recursos que você tem à disposição. Felizmente, o WARCannon possui várias ferramentas que você pode usar para realizar isso!
Fazer grep na internet não é para os fracos de coração, mas começar com uma peneira eficaz é o primeiro passo. O WARCannon oferece suporte a isso permitindo a verificação local de expressões regulares contra dados reais do Common Crawl. Primeiro, abra lambda_functions/warcannon/matches.js e modifique o objeto regex_patterns para incluir as expressões regulares que você deseja usar no formato name: pattern. Aqui está um exemplo do conjunto de pesquisa padrão:
exports.regex_patterns = {
"access_key_id": /(\'A|"A)(SIA|KIA|IDA|ROA)[JI][A-Z0-9]{14}[AQ][\'"]/g,
};
Strings que correspondem a esta expressão serão salvas sob a chave correspondente nos resultados; access_key_id neste caso. Dica profissional: Use RegExr com o formato 'JavaScript' para construir e testar expressões regulares contra correspondências conhecidas.
Você também tem a opção de capturar apenas resultados de domínios especificados. Para fazer isso, basta preencher o array domains com os FQDNs que você deseja incluir. Recomenda-se deixar vazio [] já que quase nunca vale a pena (o esforço de processamento economizado é muito pequeno), mas pode ser útil em alguns casos específicos.
exports.domains = ["example1.com", "example2.com"];
Assim que o matches.js estiver preenchido, execute o seguinte comando:
warcannon$ warcannon testLocal -s
Você pode opcionalmente adicionar um caminho para um WARC no bucket S3 commoncrawl se desejar, mas um padrão hardcoded será usado caso contrário.
O WARCannon processará o arquivo WARC em streaming (ou o baixará completamente se você omitir -s) para encontrar as correspondências configuradas. O WARCannon salvará os resultados na pasta ~/.warcannon/ quando você interromper com ctrl+c ou quando o processamento terminar. Isso facilita testar correspondências comuns rapidamente com largura de banda mínima.
Além de tudo isso, o WARCannon tentará avaliar o custo computacional total de suas expressões regulares quando executadas localmente. Dessa forma, você pode ser informado se uma determinada expressão regular irá impactar significativamente o desempenho antes de executar sua campanha.
