Net::Whois - Scraper que verifica dados de domínio via RDAP e WHOIS
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
🔗 Selecionando dados arbitrários
Net::Whois selecionando dados arbitrários
🔗 Parâmetros de domínios
Obtenção de parâmetros por domínios
🔗 Notificação de prazos de domínios
Recebemos notificações no Telegram sobre o fim do prazo de registro de domínios
🔗 Coleta de base de endereços de e-mail
O modelo permite coletar endereços de e-mail de domínios através do serviço Whois.
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::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"
}]
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âmetro | Valor padrão | Descrição |
|---|---|---|
| Recursive query | ☐ | Permite obter uma versão estendida do WHOIS |
| WHOIS server | Permite definir seu próprio servidor WHOIS | |
| RDAP server | Permite 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 |