Script para baixar e-mails de sites automaticamente
Publicado por Iago Lira (última atualização em 11/08/2016)
[ Hits: 11.947 ]
Homepage: https://notabug.org/iagolira/
Download autoC 2.4.sh (versão 2)
Olá pessoal, depois de se deparar com altos preços de lista de e-mails, decidi criar meu próprio programa ou script para criar minhas lista de e-mails. Para que o script funcione, o lynx ou wget devem estar instalados. Claro, deve estar conectado a internet.
Versão 2 - Enviado por Iago Lira em 26/07/2016
Changelog: Algumas melhorias, mas ainda considero o script como uma "gambiarra". :p
#!/bin/bash #+---------------------------------+ #|Script: autoC 2.3 | #|Autor: Francisco Iago Lira Pasos | #|Localidade: Teresina - PI | #+---------------------------------+ export version export pathdir export dirsite export total export totalloop export totalmail export totalsite export totalp export objeto export regiao export codel export codew export ci export fimloop version="1.2" padrao="lynx" #Padrão para acessar conteúdos echo "============================================================" read -p 'Deseja manter o lynx como padrão sim(s) ou não(n)?' wl [ "$wl" = "s" ] && echo "Ok! Proseguindo" || padrao="wget" echo "============================================================" #Verificando se o wget ou lynz estão instalados: codew=$(which wget | echo $?) codel=$(which lynx | echo $?) if [ $codel -ne 0 ] && [ $codew -ne 0 ]; then echo "Instale o lynx ou wget!!!!" read -p 'Deseja instalá-los agora? ' snwl [ "$snwl" = "s" ] && su -c "apt-get install wget lynx" else #Encontrando o total de páginas encontradas # pathdir="www.bing.com" # if [ -d $pathdir ]; then # rm -rf $pathdir; # else # echo "O arquivo $pathdir não existe!"; # fi while : do echo "======================================================================" clear echo "======================================================================" read -p 'Digite o objeto de pesquisa (ex: estamparia, calçados, pizzaria e etc):' obj objeto="$(echo $obj | sed 's/ /%20/g')" echo "======================================================================" clear echo "======================================================================" read -p 'Digite a região de pesquisa (ex: "teresina" "piaui"):' reg regiao="$(echo $reg | sed 's/ /%20/g')" echo "======================================================================" if [ "$objeto" = "" ] && [ "$regiao" = "" ] then echo "Alerta: Digite pelo menos um objeto de pesquisa!" sleep 2 continue fi #Atalho if [ "$objeto" = "" ]; then dirsite=$(echo "contato%22email%22"$regiao) elif [ "$regiao" = "" ]; then dirsite=$(echo "contato%22email%22"$objeto) elif [ -n $regiao ] && [ -n $regiao ]; then dirsite=$(echo "contato+email%22"$objeto"%22"$regiao) fi if [ -n $objeto ] || [ -n $regiao ] then break fi done # #Deletar a pasta www... # if [ -d $pathdir ]; then # rm -rf $pathdir # fi #Testando conexão clear echo "=======================================" echo "Testando sua conexão..." echo "=======================================" tmili=$(ping -c 3 www.bing.com | grep time | sed 's/.*time//' | sed '/=/d' | sed 's/ms//g') tseg=$(printf '%.*f\n' 0 $(echo $(echo "$tmili/1000" | bc) | sed "s/\./,/g") | sed "s/,/./g") [ $tseg -ge 2 ] && echo "Alerta: Sua conexão está lenta!" sleep 3 echo "=======================================" echo "Fim do teste..." echo "=======================================" sleep 2 #Baixando a página do buscador bing # wget -E -H -k -K -p https://www.bing.com/search?q=$(echo $dirsite)&first=0 # [ $tseg -lt 2 ] && sleep 18 || sleep 20 echo "=======================================" clear echo "=======================================" #Total de páginas dirtotal=www.bing.com/search?q=$(echo $dirsite).html totalp=$(cat $dirtotal | \ sed 's/^[^>]*[>]//; s/[<][^>]*[>]/\n/g; s/[<].*$//' | grep resultados | \ sed 's/[^0-9]*//g' | sed '/^\s*$/d') clear echo "============================================================" echo "Alerta: Digite múltiplos de 9!" read -p "Quantos sites você quer na sua busca?" totalloop echo "============================================================" clear echo "===========================================" read -p "Quantos e-mails você deseja? " totalmail echo "===========================================" if [ $totalloop -gt $totalp ]; then echo "===========================================" echo "O número de sites que deseja é invalido!" echo "===========================================" totalloop=$totalp fi echo "=======================================" clear echo "=======================================" echo "=======================================" clear echo "================================================" read -p "Deseja continuar script de onde parou (s/n)? " sn1 echo "================================================" clear echo "=======================================" echo "Criando lista de sites..." echo "=======================================" if [ "$sn1" = "n" ]; then ci=0 echo "" > .csite else [ -f site.txt ] && rm site.txt ci=$(cat .csite) fi # calcloop=$(echo "288*$totalloop/500" | bc) #Regra de três simples (minha conveniência) # fimloop=$(printf '%.*f\n' 0 $(echo $(echo "$totalloop/9" | bc) | sed "s/\./,/g") | sed "s/,/./g") #Arredonda valor para inteiro i=$ci if [ "$padrao" = "lynx" ]; then INICIO1=$(date +%s) for (( i = 0; i <= $totalloop; i++ )) do totalsite=`cat site.txt | sort | uniq | wc -l` if [ $totalsite -gt $totalloop ]; then break fi clear echo "=======================================" echo "Criando lista de sites..." echo "Sites processados: $totalsite" echo "=======================================" echo "Número de tentativs: $i" echo "SUCCESS: Extracted `wc -l site.txt` and listed them in '`pwd`/urls' file for reference." echo $i > .csite #Usando o bing para vasculhar a NET lynx -dump $(echo "https://www.bing.com/search?q=`echo $dirsite`&first="$i) > gone.tmp sed 's/http/\^http/g' gone.tmp | tr -s "^" "\n" | grep http| sed 's/\ .*//g' > gtwo.tmp rm gone.tmp cat gtwo.tmp | sed '/bing/d;/microsoft/d;/youtube/d;/google/d' | sort | uniq >> site.txt rm gtwo.tmp sleep 1 done FIM1=$(date +%s) tempsite=$(( $FIM1 - $INICIO1 )) elif [ "$padrao" = "wget" ]; then INICIO1=$(date +%s) for (( ; ; )) do totalsite=`cat site.txt | sort | uniq | wc -l` if [ $totalsite -gt $totalloop ]; then break fi clear echo "=======================================" echo "Criando lista de sites..." echo "Sites processados: $totalsite" echo "=======================================" echo "Número de tentativs: $i" echo $i > .csite #Usando o bing para vasculhar a NET wget "$(echo "https://www.bing.com/search?q=`echo $dirsite`&first="$i)" -q -O - | sed 's/h="/\n/g;s/href="/\n/g;s/"//g' | grep "http" | sed -n "s/^http:\/\///p" | sed "s/\/$//" | sed '/bing/d;/microsoft/d;/facebook.com/d;/whatsapp/d;/outlook/d;/msn/d' | grep $objeto | sort | uniq >> site.txt let i=$i+1 timebegin=`find site.txt -mtime -1 -type f -exec ls -l {} \; | awk '{print $8}' | sed 's/://g'` timefinal=`date +%H%M` [ $timebegin -ne $timefinal ] && break [ $i -gt 900 ] && break done FIM1=$(date +%s) tempsite=$(( $FIM1 - $INICIO1 )) fi clear echo "=======================================" clear echo "=======================================" if [ -f e-mail.txt ]; then rm e-mail.txt; else echo "O arquivo e-mail.txt não existe!"; fi clear echo "=======================================" echo "Coletando e-mails..." echo "=======================================" #Extrai contatos e-mail dos sites if [ "$sn1" = "s" ]; then lineNumber=$(cat .cmail) let cont=$lineNumber else let cont=1 lineNumber=1 echo "" > .cmail fi cont2=1 tmail=0 if [ "$padrao" = "lynx" ]; then #========================================= INICIO2=$(date +%s) while read site do clear echo "=======================================" echo "Criando lista de e-mails..." echo "E-mails processados: $tmail" echo "=======================================" echo "Número de tentativas: `echo $cont2`" if [ $cont2 -ge $lineNumber ]; then echo $cont2 > .cmail [ $(echo $site | echo $?) -ne 0 ] && continue #Se o endereço IP não funcionar pule a linha lynx -dump $site | grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" | sort | uniq >> e-mail.txt #altavista.com|aol.com|bol.com.br|brturbo.com.br|globo.com|globomail.com|gmail.com|hotmail.com|ibest.com.br|ig.com.br|itelefonica.com.br|live.com|msn.com|outlook.com|pop.com.br|superig.com.br|terra.com.br|uol.com.br|yahoo.com.br|zipmail.com.br fi let cont2=$cont2+1 tmail=$(cat e-mail.txt | sort | uniq | wc -l) [ $tmail -gt $totalmail ] && break done < site.txt FIM2=$(date +%s) tempmail=$(( $FIM2 - $INICIO2 )) #========================================== elif [ "$padrao" = "wget" ]; then INICIO2=$(date +%s) while read site do clear echo "=======================================" echo "Criando lista de e-mails..." echo "E-mails processados: $tmail" echo "=======================================" echo "Número de tentativas: `echo $cont2`" if [ $cont2 -ge $lineNumber ]; then echo $cont2 > .cmail [ $(echo $site | echo $?) -ne 0 ] && continue #Se o endereço IP não funcionar pule a linha wget "$site" -q -O - | grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" | sort | uniq >> e-mail.txt #altavista.com|aol.com|bol.com.br|brturbo.com.br|globo.com|globomail.com|gmail.com|hotmail.com|ibest.com.br|ig.com.br|itelefonica.com.br|live.com|msn.com|outlook.com|pop.com.br|superig.com.br|terra.com.br|uol.com.br|yahoo.com.br|zipmail.com.br fi let cont2=$cont2+1 tmail=$(cat e-mail.txt | sort | uniq | wc -l) [ $tmail -gt $totalmail ] && break done < site.txt FIM2=$(date +%s) tempmail=$(( $FIM2 - $INICIO2 )) fi #Converter lista para csv clear echo "=======================================" echo "Aguarde..." echo "=======================================" a1='e-mail.txt' a2="$(echo $(echo $a1 | sed 's/\..*//')".csv")" [ -f $a2 ] && rm $a2 while read i do name=$(echo $i |sed -r 's/@/ - /g;s/(^.| .)/\U&/g;s/(.*)(\..{3}).*/\1/g') echo "$name;$i" >> $a2 done < $a1 cat $a2 | sort | uniq > $(echo $a".pop") cat $(echo $a".pop") > $a2 rm $(echo $a".pop") #Cabeçalho csv #echo "name;E-mail Address" > $a2 sed -i "1i name;E-mail Address" $a2 #Inseri name;E-mail Address na primeira linha clear echo "==========================" [ $? -eq 0 ] && echo "Concluído com sucesso!" || echo "Aviso: Ocorreu algum erro ao converter $a1 para csv!" clear echo "=======================================" clear echo "=======================================" # if [ -d $pathdir ]; then # rm -rf $pathdir; # else # echo "O diretório www.bing.com não existe!"; # fi echo "=======================================" clear echo "=======================================" cat site.txt | sort | uniq > site cat site > site.txt; rm site cat e-mail.txt | sort | uniq > email cat email > e-mail.txt; rm email echo "=======================================" clear echo "=======================================" # #Renomeando o arquivo # if [ -f $(echo $dirsite'_'$(cat e-mail.txt | wc -l)'.txt' | sed 's/+/_/g') ]; then # echo "" # else # cat e-mail.txt > $(echo $dirsite'_'$(cat e-mail.txt | wc -l)'.txt') # rm e-mail.txt # fi echo "---------------------------------------------" echo "---------> Conluído com sucesso! <-----------" echo "Número de e-mails: $(cat e-mail.txt | wc -l)" echo "Tempo de captura de sites: $tempsite segundos" echo "Número de sites: $(cat site.txt | wc -l)" echo "Tempo de captura de e-mails: $tempmail segundos" echo "Tempo de ping a cada 3 tentativas: $tseg segundos " echo "---------------------------------------------" fi
Tradução de endereços de uma rede interna
Find em arquivos compactados (grep em arquivos tgz)
Envia e-mails periodicamente com back-up do servidor
Bashblog v1.0 0 - cria um microblog em HTML5
Criando arquivos de in e out no CBQ
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Pastas da raiz foram para a área de trabalho (4)
usb's param de funcionar do nada (6)
Como criar condições de monitoria de 2 IPs no Zabbix (0)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (2)