Jump to content

Querys para servidores Whois com python sockets


Guest gnoo

Recommended Posts

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 to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...