Jump to content
Sign in to follow this  
gnoo

Querys para servidores Whois com python sockets

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.

 

  • Agradecer 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...