Ir para conteúdo

Querys para servidores Whois com python sockets


Visitante gnoo

Posts Recomendados

galerinha.png.ecf4de6c6c283575e0add490b1921763.png

 

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á...

 

2019-07-13_22-36.thumb.png.2924a200d5ac2fce6bfa4790457209ee.png

2019-07-13_22-39.thumb.png.88d9046fbc90f0ad8bf7fca6054b2319.png

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.

2019-07-13_22-46.png.50a26bc655f578e8cba8d35b485c028d.png

2019-07-13_22-47.png.8793d7ac3a8c140493c70b157fe266a0.png

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.

2019-07-13_22-59.png.4993070f5ab13bd941e9e5dddbe461d6.png

 

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

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...