Pular para o conteúdo principal

Net::Whois - Scraper que verifica dados de domínio via RDAP e WHOIS

Visão geral do scraper​

Visão geral do scraper

Os dados sobre o domínio são coletados via RDAP (HTTP, JSON), WHOIS (porta 43) ou página web do operador — dependendo da zona de domínio. Para cada TLD no scraper, são definidos servidores RDAP e WHOIS; se o RDAP estiver disponível para a zona, a consulta é realizada através dele primeiro; em caso de erro, recorre-se ao WHOIS; se nenhum dos dois estiver disponível, a consulta é feita via web, quando a página existe.

O conjunto de métodos de verificação depende do operador, e não apenas do TLD. Algumas zonas não possuem WHOIS ou RDAP, ou eles não funcionam — por decisão do operador. A página web para verificação também não existe para todos: sua disponibilidade também é definida pelo operador. Se a página existir, o scraper solicita os dados através dela.

Existem zonas onde o operador possui apenas o TLD, e os sites são registrados no SLD (segundo nível, por exemplo co.uk, org.uk). O proprietário do SLD pode ser um ou vários — mas não é o operador do TLD. O conjunto de métodos de verificação é definido pelo proprietário do SLD: WHOIS, RDAP, página web, uma combinação deles — ou nada disso.

A composição dos campos no WHOIS e RDAP também pode variar — devido à legislação, política do operador e restrições de dados pessoais. Mas o conjunto em geral é previsível: registro, datas, NS, registrador, status.

Ao coletar via web, não há padronização. Sempre é verificado se o domínio está registrado ou não. O restante depende do que o operador exibiu na página: pode ser um conjunto quase completo ou apenas o fato do registro.

Saiba mais: RDAP (inglês), WHOIS.

A funcionalidade do A-Parser permite salvar as configurações de extração de dados para uso futuro (presetes), definir agendamentos de extração de dados e muito mais. Você pode usar a multiplicação automática de consultas, substituição de subconsultas a partir de arquivos, busca por combinações alfanuméricas e listas para obter o máximo de resultados possível.

A gravação dos resultados é possível no formato e estrutura que você necessita, graças ao poderoso motor de modelos integrado Template Toolkit, que permite aplicar lógica adicional aos resultados e exibir os dados em vários formatos, incluindo JSON, SQL e CSV.

Casos de uso do scraper​

Dados coletados​

A lista abaixo é um conjunto típico para WHOIS/RDAP; campos específicos dependem da resposta do servidor e das leis. Ao coletar via web, apenas o fato do registro é garantido; outros campos são preenchidos se o operador os publicar.

  • $registered — se o domínio está registrado ou não
  • $expire_date — data de expiração do registro do domínio
  • $creation_date — quando o domínio foi registrado
  • $free_date — data de liberação do domínio
  • $whoisserver — servidor WHOIS utilizado (em consultas WHOIS; frequentemente vazio em RDAP)
  • $rdapserver — URL do servidor RDAP (em consultas RDAP bem-sucedidas)
  • $registrar — registrador do domínio
  • $updated_date — data da última atualização do registro
  • $data — resposta bruta: texto WHOIS ou JSON RDAP
  • Array $ns (Name servers):
    • $ns.$i.server — nome do servidor NS
  • Array $statuses (Statuses list):
    • $statuses.$i.status — status do domínio

Recursos​

  • Seleção automática de RDAP ou WHOIS por zona de domínio (prioridade RDAP)
  • Se a zona não possuir WHOIS/RDAP funcional, mas tiver uma página web do operador — a verificação é feita através dela
  • A composição dos campos WHOIS/RDAP depende da resposta do servidor e da legislação
  • Na extração de dados via web, a existência do domínio é sempre verificada; os demais campos apenas se o operador os fornecer
  • Algumas zonas (TLD e SLD) não possuem WHOIS/RDAP nem página web — os dados WHOIS não estão disponíveis, mas a existência do domínio é verificada via Net::DNSNet::DNS
  • Suporte para domínios internacionais (IDN, por exemplo яндекс.рф)

Opções de uso​

  • Coleta de domínios livres ou que ficarão livres em breve
  • Coleta de lista de servidores NS
  • Obtenção de status de domínios

Consultas​

Como consultas, é necessário indicar o domínio do site desejado, por exemplo:

a-parser.com  
yandex.ru
google.com
vk.com
facebook.com

Opções de exibição de resultados​

O A-Parser suporta formatação flexível de resultados graças ao motor de modelos integrado Template Toolkit, o que permite exibir resultados em formato livre, bem como estruturado, como CSV ou JSON

Saída padrão​

Formato do resultado:

$query - registered: $registered, expire: $expire_date, creation: $creation_date

O resultado exibe o domínio, se está registrado, a data de expiração e a data de registro do domínio:

facebook.com - registered: 1, expire: 30.03.2028, creation: 29.03.1997
a-parser.com - registered: 1, expire: 25.02.2022, creation: 25.02.2012
vk.com - registered: 1, expire: 23.06.2021, creation: 24.06.1997
yandex.ru - registered: 1, expire: 01.10.2021, creation: 23.09.1997
google.com - registered: 1, expire: 14.09.2028, creation: 15.09.1997

Exibição da lista de NS​

Formato do resultado:

$ns.format('$server\n')

Exemplo de resultado:

demi.ns.cloudflare.com
vern.ns.cloudflare.com

Exibição de dados de prazos do domínio em CSV​

Formato do resultado:

[% tools.CSVline(query, registered, expire_date, creation_date, updated_date, free_date, whoisserver, rdapserver, registrar) %]

Exemplo de resultado (domínio .com, resposta via RDAP — whoisserver vazio, rdapserver preenchido):

a-parser.com,1,25.02.2027,25.02.2012,10.02.2026,none,,https://rdap.verisign.com/com/v1/domain/a-parser.com,"Squarespace Domains II LLC"

Exibição da lista de NS em tabela CSV​

Formato do resultado:

[% FOREACH ns;
tools.CSVline(query, server);
END %]

Exemplo de resultado:

a-parser.com,demi.ns.cloudflare.com
a-parser.com,vern.ns.cloudflare.com

Dump de resultados em JSON​

Formato geral do resultado:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.registered = p1.registered;
obj.expire_date = p1.expire_date;
obj.creation_date = p1.creation_date;
obj.updated_date = p1.updated_date;
obj.free_date = p1.free_date;
obj.whoisserver = p1.whoisserver;
obj.rdapserver = p1.rdapserver;
obj.registrar = p1.registrar;
obj.domains = [];

FOREACH item IN p1.ns;
obj.domains.push({
server = item.server
});
END;

obj.json %]

Texto inicial:

[

Texto final:

]

Exemplo de resultado (RDAP):

[{
"registered": 1,
"rdapserver":"https://rdap.verisign.com/com/v1/domain/a-parser.com",
"query":"a-parser.com",
"free_date":"none",
"domains":[
{
"server":"demi.ns.cloudflare.com"
},
{
"server":"vern.ns.cloudflare.com"
}
],
"registrar":"Squarespace Domains II LLC",
"expire_date":"25.02.2027",
"creation_date":"25.02.2012",
"whoisserver":"",
"updated_date":"10.02.2026"
}]
dica

Para que as opções "Prepend text" e "Append text" estejam disponíveis no Editor de tarefas, é necessário ativar "More options".

Processamento de resultados​

O A-Parser permite processar resultados diretamente durante a extração de dados; nesta seção, apresentamos os casos mais populares para o scraper Net::Whois

Obtenção do registrador do domínio​

Ao responder via WHOIS, o campo $p1.data contém texto; via RDAP — JSON. Para obter o registrador em ambos os casos, adicione dois Construtores de resultados.

Adicionar Result Builders (Construtor de resultados) e selecionar a fonte na lista suspensa: $p1.data. Selecionar o tipo: RegEx Match. No campo Expressão Regular, inserir: Registrar:\s*(.+) e salvar na variável registrarwhois.

Adicionar novamente um Result Builders (Construtor de resultados) e selecionar a fonte na lista suspensa: $p1.data. Selecionar o tipo: RegEx Match. No campo Expressão Regular, inserir: "entities"[\s\S]+?"vcardArray"[\s\S]+?"fn"[\s\S]+?"text"[\s\S]+?"([^"]+?)" e salvar na variável registrarrdap.

Adicionar ao Result format (Formato do resultado): [% IF registrarrdap == 'none' %]$query - $registrarwhois[% ELSE %]$query - $registrarrdap[% END %] — se o RDAP não encontrar o nome (registrarrdap for igual a none), o valor do WHOIS será exibido, caso contrário, o do RDAP.

Baixar exemplo

Como importar o exemplo para o A-Parser

eJyVVNtO20AQ/RVrFEQoJioPfbGEqkATiSpNKAH1wU6lVTxJt6x3ze46EEX5987Y
jh1TpKpP9lzPmdvuYIPWSaMhugzBC/fk7iw69A6ieAd5+Q8RWFxL562wEEIurKMg
cohhij6Kfvwy0pEhxZUolIdwB36bI4UZym5limSUKckrYzPhKWnpBhuhCnaLT4Lb
cdBg2FTkwdVVcKqNxtPgZNF7LtBug4ug1/i8MCbFjSbz0fsenIUdpl/InmjYLxYh
VNBuXPIg5F5+OaiLbIxzscEHw2ylwlY9JmkqMubbS4VHtg6qgvpnA//KGUSaSk/d
FKpC4Ca1qI9aPnO9K6EchsCUJbqxNRnl9FhmKOs40IuhqgsoR1EGf69imhyOuI4F
MUnfWqRHK7yxs5wJkX4HRg+VmuAGleuQ2F4XUqU00uGKgm7rwPddZn/l2Df1HUPR
4F8scWiylNL17FsblZqJWTd2JTPpSeFuTKGp9o8hPCHmh57B1FB3MmOxQakDa3Ba
2xw1L1k7smHeqjpVdMZypNyBM4VdEl5M+DRlwa2vl5k2C1/L5PyN4P6waVGSuA/9
wfnZwfhQBZDoDU+xu7Ww2If/BZQAak97hS6BmLCSZL44/5zAZilsOrRWbLv6le7K
vFpdTT/+mQD9nSXwT858R0SZ6C2NXsn1rL7pQxML/UDPxkzfmCxXyBPXhVK0sA7v
28sZunpBWWhn9zb4poQgHs1bQnSMcl/nFbfcSmL3iTlntGPHqHXKpVDq8X5ybOFA
500+0yNr3yx2eTIgLqpHbbCkW2wvs6TKRS7p3teGDpEk7kT9BDZP5Y7W+be7q7Qc
Vur2fwBx19yZ

Configurações possíveis​

ParâmetroValor padrãoDescrição
Recursive query☐Permite obter uma versão estendida do WHOIS
WHOIS serverPermite definir seu próprio servidor WHOIS
RDAP serverPermite definir seu próprio servidor RDAP
Checking by DNS☑Permite verificar se o domínio está registrado com base na existência de um IP para o domínio
Checking domains by DNS record☑Verificação de IP; se encontrar o status ALLOCATED, define o domínio como registrado; se a opção estiver desativada, a verificação de IP não ocorre
Force DNS check for not found domains☑Verificação forçada se o domínio foi identificado como não registrado