Visitante gnoo Postado Julho 13, 2019 em 22:22 Compartilhar Postado Julho 13, 2019 em 22:22 Saudações coisinhas fofas, fiz aqui um pequeno script em python para fazer requisições para servidores whois e queria partilhas com vocês, porque vocês merecem muitas coisinhas boas, então vamos lá... Root Zone Database https://www.iana.org/domains/root/db NOTA: Se clicarem no .br por exemplo vão ser redirecionados para uma página onde podem encontrar o "nome" do servidor para o qual deve ser feita a query caso o dominio que quem verificar terminar em .br. SCRIPT EM PYTHON from socket import * import re endereco = "mentebinaria.com.br" whois_arin = "whois.arin.net" servidores_whois_tdl = {'.br': 'whois.registro.br', '.org': 'whois.pir.org', '.com': 'whois.verisign-grs.com', '.pt': 'whois.dns.pt'} padrao_expressao_regular = re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$") def requisicao_whois(servidor_whois, endereco_host, padrao): objeto_socket = socket(AF_INET, SOCK_STREAM) conexao = objeto_socket.connect_ex((servidor_whois, 43)) if conexao == 0: if padrao == True: objeto_socket.send('n + {}\r\n'.format(endereco_host).encode()) while True: dados = objeto_socket.recv(65500) if not dados: break print(dados.decode('latin-1')) elif padrao == False: objeto_socket.send('{}\r\n'.format(endereco_host).encode()) while True: dados = objeto_socket.recv(65500) if not dados: break print(dados.decode('latin-1')) if padrao_expressao_regular.match(endereco): requisicao_whois(whois_arin, endereco, padrao = True) else: for TLD in servidores_whois_tdl.keys(): if endereco.endswith(TLD): requisicao_whois(servidores_whois_tdl[TLD], endereco, padrao = False) NOTAS IMPORTANTES O SOBRE SCRIPT Porquê este ciclo de repetição ? while True: dados = objeto_socket.recv(65500) if not dados: break print(dados.decode('latin-1')) Porque a resposta completa vem em pacotes diferentes na maioria das vezes, e quando chegam são reagrupados, então se estiveres à espera de receber apenas o buffer e fazer output dos dados, ficas apenas com a resposta de um pacote, ou seja a resposta fica incompleta. Ao fazer a query para o servidor no método send( ) vais ver isto n + objeto_socket.send('n + {}\r\n'.format(endereco_host).encode()) segue o link : https://www.arin.net/resources/registry/whois/rws/api/ Vê o tópico NICNAME/Whois Queries está lá a explicar tudo. Porquê que é que está a ser feito um decode 'latin-1' nos dados recebidos ? print(dados.decode('latin-1')) Eu quando estive a fazer uma análise do domínio mentebinária.com.br, aparentemente o dono tem um nome muito estranho, que é mercês então o caractere ê vem num formato 0xea , então não dá para resolver com utf-8 tem que ser com latin-1. Vê esta informação: https://docs.python.org/3/howto/unicode.html e esta também https://docs.python.org/3/library/codecs.html#standard-encodings penso que seja tudo, beijinhos fofos. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.