Skip to main content

Net::Whois - The parser checks domain data via RDAP and WHOIS

Parser overview

Parser overview

Domain data is collected via RDAP (HTTP, JSON) or WHOIS (port 43) — depending on the domain zone. For each TLD, RDAP and WHOIS servers are predefined in the parser; if RDAP is available for a zone, the request is performed through it first, and if it fails — via WHOIS.

More details: RDAP, WHOIS.

The A-Parser functionality allows you to save parsing settings for future use (presets), set parsing schedules, and much more. You can use automatic query multiplication, substitution of subqueries from files, brute-forcing of alphanumeric combinations, and lists to obtain the maximum possible number of results.

Saving results is possible in any format and structure you need, thanks to the built-in powerful Template Toolkit template engine, which allows you to apply additional logic to the results and output data in various formats, including JSON, SQL, and CSV.

Parser use cases

Collected data

  • Whether the domain is registered or not
  • Domain registration expiration date
  • When the domain was registered
  • Last record update date
  • RDAP server URL — upon a successful RDAP request
  • WHOIS server used — upon a WHOIS request; often empty for RDAP
  • List of domain name servers
  • Domain registrar
  • Current domain status
  • Domain release date
  • Raw response — WHOIS text or RDAP JSON

Capabilities

  • Automatic selection of RDAP or WHOIS based on the domain zone (RDAP priority)
  • Support for internationalized domain names (IDN, e.g., яндекс.рф)

Use cases

  • Collecting available domains or those that will soon expire
  • Collecting a list of NS servers
  • Obtaining domain statuses

Queries

You should specify the domain of the target site as queries, for example:

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

Result output options

A-Parser supports flexible result formatting thanks to the built-in Template Toolkit template engine, which allows it to output results in any form, as well as in structured formats such as CSV or JSON

Default output

Result format:

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

The result displays the domain, whether it is registered, the expiration date, and the domain registration date:

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

Outputting NS list

Result format:

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

Result example:

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

Outputting domain dates to CSV

Result format:

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

Result example (.com domain, response via RDAP — whoisserver is empty, rdapserver is populated):

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"

Outputting NS list to a CSV table

Result format:

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

Result example:

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

Dumping results to JSON

General output format:

[% 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 %]

Initial text:

[

Final text:

]

Result example (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"
}]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Results processing

A-Parser allows processing results directly during parsing; in this section, we have provided the most popular cases for the Net::Whois parser

Obtaining the domain registrar

When responding via WHOIS, the $p1.data field contains text; with RDAP, it contains JSON. To get the registrar in both cases, add two Results Builders.

Add a Results Builder and select the source from the drop-down list: $p1.data. Select type: RegEx Match. In the Regex field, enter: Registrar:\s*(.+) and save to the variable registrarwhois.

Add a Results Builder again and select the source from the drop-down list: $p1.data. Select type: RegEx Match. In the Regex field, enter: "entities"[\s\S]+?"vcardArray"[\s\S]+?"fn"[\s\S]+?"text"[\s\S]+?"([^"]+?)" and save to the variable registrarrdap.

Add to the Result format: [% IF registrarrdap == 'none' %]$query - $registrarwhois[% ELSE %]$query - $registrarrdap[% END %] — if RDAP did not find the name (registrarrdap equals none), the value from WHOIS is output, otherwise from RDAP.

Download example

How to import an example into 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

Possible settings

ParameterDefault valueDescription
Recursive queryAllows obtaining an extended version of WHOIS
WHOIS serverAllows you to specify your own WHOIS server
RDAP serverAllows you to specify your own RDAP server
Checking by DNSAllows checking if a domain is registered based on the existence of an IP for the domain
Checking domains by DNS recordIP check: if it finds status ALLOCATED, it defines the domain as registered; if the option is disabled, no IP check occurs at all
Force DNS check for not found domainsForced check if the domain was determined as not registered