├── README.md ├── core └── banner.py └── PyFinder.py /README.md: -------------------------------------------------------------------------------- 1 | # PyFinder 2 | ![banner](https://user-images.githubusercontent.com/62577914/97069615-71503f80-159f-11eb-891c-7ef3c94553f3.jpg) 3 | 4 | ## Script Feito usando a API do Hunter.io v2 5 | 6 | ### Requisitos 7 | * Python3 (porque estamos em 2020) 8 | 9 | ### Como usar 10 | Para usar todas as funções você deve obter sua api key no site [Hunter.io](https://hunter.io/api-keys) 11 | 12 | Logo de inicio use a opção 4 13 | * ` Salvar Key` 14 | para deixar salvo sua KEY para que não precise ficar digitando 15 | 16 | 17 | PyFinder Suporta os mesmos metodos usados do [Hunter.io](https://hunter.io/api/v2/docs) v2 API: 18 | 19 | 20 | Com a diferença de que as consultas sao ILIMITADAS 21 | * `domain_search` 22 | 23 | Obtenha os endereços de e-mail de qualquer site. 24 | 25 | * `email_finder` 26 | 27 | Encontre os endereços de e-mail das pessoas com as quais deseja entrar em contato, 28 | * `email_verifier` 29 | 30 | Verifique a capacidade de entrega de qualquer endereço de e-mail. 31 | 32 | 33 | ![king](https://user-images.githubusercontent.com/62577914/97068550-73fa6700-1596-11eb-9f05-6e6802776751.png) 34 | -------------------------------------------------------------------------------- /core/banner.py: -------------------------------------------------------------------------------- 1 | def banner(): 2 | print('\033[1;97m' + "L D F G R A W V R H W S B S K L T") 3 | print("E J W V " '\033[1;32m' + "P Y F I N D E R " '\033[37m'+"W Q J Z O") 4 | print('\033[1;97m' + "K A Y U S D G P Y I B F H D I K F" + '\033[0;0m') 5 | 6 | def email_verifierBanner(): 7 | print('\033[1;97m' + "L D F G R A W V R H W S B S K L T") 8 | print("E J W V " '\033[1;32m' + "V E R I F I E R " '\033[37m'+"W Q J Z O") 9 | print('\033[1;97m' + "K A Y U S D G P Y I B F H D I K F" + '\033[0;0m') 10 | 11 | 12 | def finder(): 13 | print('\033[1;97m' + "L D F G R A W V R H W S B S K L T") 14 | print("E J W V " '\033[1;32m' + "F I N D E R " '\033[37m'+"W Q J Z O G Z") 15 | print('\033[1;97m' + "K A Y U S D G P Y I B F H D I K F" + '\033[0;0m') 16 | 17 | 18 | def domain(): 19 | print('\033[1;97m' + "L D F G R A W V R H W S B S K L T") 20 | print("E J W V " '\033[1;32m' + "D O M A I N " '\033[37m'+"W Q J Z O F V") 21 | print('\033[1;97m' + "K A Y U S D G P Y I B F H D I K F" + '\033[0;0m') 22 | 23 | def accinfo(): 24 | print('\033[1;92m'+"-----------------------------------------------------------") 25 | print("--- INFORMAÇÕES DA CONTA ---") 26 | print("-----------------------------------------------------------"+'\033[0;0m') -------------------------------------------------------------------------------- /PyFinder.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: UTF-8 -*- 3 | 4 | import requests 5 | import json 6 | import sys, os 7 | import time 8 | 9 | import core 10 | 11 | from core.banner import * 12 | 13 | def Register_key(): 14 | 15 | Rkey = input("Digite sua Key >> ") 16 | 17 | 18 | with open('core/Saved_key', 'w') as arq: 19 | 20 | Fkey = arq.write(Rkey) 21 | 22 | print("Key salva com sucesso") 23 | time.sleep(1) 24 | menu() 25 | 26 | 27 | def AccInfo(): 28 | 29 | if os.path.exists('core/Saved_key'): 30 | 31 | try: 32 | arq = open('core/Saved_key', 'r') 33 | key = arq.read() 34 | arq.close() 35 | 36 | 37 | req = requests.get('https://api.hunter.io/v2/account?api_key={}'.format(key)) 38 | dicio = json.loads(req.text) 39 | 40 | accinfo() 41 | print('\033[1;97m'+"Primeiro Nome: {}".format(dicio["data"]["first_name"])) 42 | print("Ultimo nome: {}".format(dicio["data"]["last_name"])) 43 | print("Email: {}".format(dicio["data"]["email"])) 44 | print("Nome do plano: {}".format(dicio["data"]["plan_level"])) 45 | print("Nivel do plano: {}".format(dicio["data"]["plan_level"])) 46 | print("Data de Reset: {}".format(dicio["data"]["reset_date"])) 47 | print("\n") 48 | print("[00] Voltar ao menu") 49 | print("[99] Sair") 50 | print("\n") 51 | esc = input("FINDER >> ") 52 | 53 | if esc == '00' or esc == '0': 54 | menu() 55 | elif esc == '99' or esc == '9': 56 | sys.exit() 57 | 58 | else: 59 | print("comando invalido") 60 | 61 | except KeyError: 62 | print("Erro Verifique a sua KEY API") 63 | time.sleep(2) 64 | menu() 65 | 66 | else: 67 | print('\033[1;31m'+"Voce nao salvou sua key api") 68 | time.sleep(1) 69 | Register_key() 70 | 71 | 72 | def domain_search(): 73 | 74 | if os.path.exists('core/Saved_key'): 75 | 76 | 77 | domain() 78 | print("\n") 79 | print('\033[1;96m'+"A pesquisa de domínio lista todas as pessoas que trabalham em uma empresa com seus nomes e endereços de e-mail encontrados na web.") 80 | print("\n") 81 | print("[00] Voltar ao Menu") 82 | print("[99] Sair"+'\033[0;0m') 83 | domin = input('\033[1;31m'+"Dominio > "+'\033[0;0m') 84 | 85 | if domin == '00' or domin == '0': 86 | os.system('clear') 87 | menu() 88 | elif domin == '99' or domin == '9': 89 | sys.exit() 90 | else: 91 | arq = open('core/Saved_key','r') 92 | key = arq.read() 93 | arq.close() 94 | 95 | try: 96 | req = requests.get('https://api.hunter.io/v2/domain-search?domain={}&api_key={}'.format(domin, key)) 97 | 98 | dicio = json.loads(req.text) 99 | os.system('clear') 100 | domain() 101 | print("\n") 102 | print('\033[1;92m'+"-----------------------------------------------------------") 103 | print("--- INFORMAÇÕES DE DOMÍNIO ---") 104 | print("-----------------------------------------------------------"+'\033[0;0m') 105 | print('\033[1;33m'+'Dominio: {}'.format(dicio["data"]["domain"])) 106 | print('Disponibilidade: {}'.format(dicio["data"]["disposable"])) 107 | print('Webmail: {}'.format(dicio["data"]["webmail"])) 108 | print('organização: {}'.format(dicio["data"]["organization"])) 109 | print('Pais: {}'.format(dicio["data"]["country"])) 110 | print('Estado: {}'.format(dicio["data"]["state"])) 111 | 112 | req2 = requests.get('https://api.hunter.io/v2/email-count?domain={}'.format(domin)) 113 | dicio2 = json.loads(req2.text) 114 | quant = dicio2["data"]["total"] 115 | 116 | print('\033[1;92m'+'-----------------------------------------------------------') 117 | print('--- TIPOS DE E-MAILS ---') 118 | print('-----------------------------------------------------------''\033[0;0m') 119 | 120 | print('\033[1;33m'+'Quantidade de e-mails: {}'.format(quant)) 121 | print('\033[1;33m'+'E-mails pessoais:{}'.format(dicio2["data"]["personal_emails"])) 122 | print('\033[1;33m'+'E-mails genericos: {}'.format(dicio2["data"]["generic_emails"])) 123 | 124 | 125 | 126 | print('\033[1;92m'+"-----------------------------------------------------------") 127 | print('--- E-MAILS ENCONTRADOS ---') 128 | print('-----------------------------------------------------------''\033[0;0m') 129 | 130 | 131 | for mail in range(0, quant): 132 | 133 | 134 | print('\033[1;33m'+'Email: {}'.format(dicio["data"]["emails"][mail]['value'])) 135 | print('Tipo: {}'.format(dicio["data"]["emails"][mail]["type"])) 136 | print("Twitter: {}".format(dicio["data"]["emails"][mail]["twitter"])) 137 | print("--------------------------------------------------------------") 138 | time.sleep(1) 139 | 140 | #print('Tipo: {}'.format(dicio["emails"]["value"])) 141 | 142 | 143 | except KeyError: 144 | print("Erro Verifique o dominio inserido ou a Key") 145 | 146 | 147 | else: 148 | print('\033[1;31m'+"Voce nao salvou sua key api") 149 | time.sleep(1) 150 | Register_key() 151 | 152 | 153 | def email_finder(): 154 | 155 | if os.path.exists('core/Saved_key'): 156 | 157 | 158 | finder() 159 | 160 | print('\033[1;96m'+"Encontre os endereços de e-mail das pessoas com as quais deseja entrar em contato") 161 | print("Apenas com o nome, sobrenome E dominio") 162 | print("\n") 163 | print("[00] Voltar ao menu") 164 | print("[99] Sair"+'\033[0;0m') 165 | dom_name = input('\033[1;31m'+"Nome do dominio: "+'\033[0;0m') 166 | p_name = input('\033[1;31m'+"Primeiro Nome: "+'\033[0;0m') 167 | u_name = input('\033[1;31m'+"Ultimo Nome: "+'\033[0;0m') 168 | 169 | 170 | 171 | if dom_name == '00' or dom_name == '0': 172 | os.system('clear') 173 | menu() 174 | elif dom_name == '99' or dom_name == '9': 175 | sys.exit() 176 | else: 177 | arq = open('core/Saved_key','r') 178 | key = arq.read() 179 | arq.close() 180 | 181 | try: 182 | req = requests.get('https://api.hunter.io/v2/email-finder?domain={}&first_name={}&last_name={}&api_key={}'.format(dom_name, p_name, u_name, key)) 183 | 184 | dicio = json.loads(req.text) 185 | os.system('clear') 186 | print("\n") 187 | print('\033[1;33m'+'Primeiro Nome: {}'.format(dicio["data"]["first_name"])) 188 | print('Ultimo Nome: {}'.format(dicio["data"]["last_name"])) 189 | print('Email: {}'.format(dicio["data"]["email"])) 190 | print('Cargo: {}'.format(dicio["data"]["position"])) 191 | print('Twitter: {}'.format(dicio["data"]["twitter"])) 192 | print('Linkedin: {}'.format(dicio["data"]["linkedin_url"])) 193 | print('Telefone: {}'.format(dicio["data"]["phone_number"])) 194 | print("\n") 195 | except KeyError: 196 | print("Email Nao encontrado") 197 | 198 | else: 199 | print('\033[1;31m'+"Voce nao salvou sua key api") 200 | time.sleep(1) 201 | Register_key() 202 | 203 | 204 | def email_verifier(): 205 | 206 | if os.path.exists('core/Saved_key'): 207 | 208 | 209 | email_verifierBanner() 210 | 211 | print("\n") 212 | print('\033[1;96m'+"Faz uma verificação no e-mail para testar se e valido") 213 | print("\n") 214 | print("[00] Para voltar ao menu") 215 | print("[99] Para sair"+'\033[0;0m') 216 | print("\n") 217 | domi = input('\033[1;31m'+'Digite o email para verificar > '+'\033[0;0m') 218 | 219 | 220 | 221 | 222 | if domi == '00' or domi == '0': 223 | os.system('clear') 224 | menu() 225 | elif domi == '99' or domi == '9': 226 | sys.exit() 227 | else: 228 | arq = open('core/Saved_key','r') 229 | key = arq.read() 230 | arq.close() 231 | 232 | try: 233 | req = requests.get('https://api.hunter.io/v2/email-verifier?email={}&api_key={}'.format(domi, key)) 234 | 235 | dicio = json.loads(req.text) 236 | os.system('clear') 237 | print("\n") 238 | print('\033[1;33m'+'Email: {}'.format(dicio["data"]["email"])) 239 | print('Status: {}'.format(dicio["data"]["status"])) 240 | print('Resultado: {}'.format(dicio["data"]["result"])) 241 | print('Servidor SMTP: {}'.format(dicio["data"]["smtp_server"])) 242 | 243 | except KeyError: 244 | print('\033[1;31m'+"Email Nao encontrado"+'\033[0;0m') 245 | else: 246 | print('\033[1;31m'+"Voce nao salvou sua key api") 247 | time.sleep(1) 248 | Register_key() 249 | 250 | 251 | 252 | def menu(): 253 | os.system('clear') 254 | banner() 255 | print("\n") 256 | print('\033[1;96m'+"Oque deseja fazer?") 257 | print("\n") 258 | print("Escolha uma ferramenta para usa-la") 259 | print("E saber mais sobre") 260 | print("\n") 261 | print("[01] EMAIL VERIFIER") 262 | print("[02] EMAIL FINDER") 263 | print("[03] DOMAIN SEARCH") 264 | print("[04] SAVE NEW KEY ") 265 | print("\n") 266 | print("[05] INFORMAÇÕES DA CONTA") 267 | print("[00] Sair") 268 | 269 | 270 | escolha = input('\033[1;31m'+"Finder > "+'\033[0;0m') 271 | 272 | os.system('clear') 273 | 274 | 275 | while True: 276 | 277 | if escolha == '0' or escolha == '00': 278 | sys.exit() 279 | 280 | elif escolha == '1' or escolha == '01': 281 | email_verifier() 282 | 283 | elif escolha == '2' or escolha == '02': 284 | email_finder() 285 | 286 | elif escolha == '3' or escolha == '03': 287 | domain_search() 288 | 289 | elif escolha == '4' or escolha == '04': 290 | Register_key() 291 | 292 | elif escolha == '5' or escolha == '05': 293 | AccInfo() 294 | else: 295 | 296 | menu() 297 | 298 | if __name__ == "__main__": 299 | menu() 300 | 301 | 302 | 303 | 304 | 305 | --------------------------------------------------------------------------------