Guest gnoo Posted July 13, 2019 at 10:22 PM Share Posted July 13, 2019 at 10:22 PM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.