Net::Whois - RDAPおよびWHOIS経由でドメインデータをチェックするスクレイパー
スクレイパーの概要

ドメインに関するデータは、ドメインゾーンに応じて、RDAP (HTTP, JSON)、WHOIS (ポート 43)、またはレジストラのウェブページを介して収集されます。各TLDに対して、スクレイパーにはRDAPおよびWHOISサーバーが設定されています。そのゾーンでRDAPが利用可能な場合は優先的にRDAP経由でリクエストが実行され、エラーが発生した場合はWHOISへ、どちらも利用できずウェブページが存在する場合はウェブ経由で実行されます。
確認方法の組み合わせは、TLDだけでなくレジストラによっても異なります。一部のゾーンでは、レジストラの判断によりWHOISやRDAPが存在しないか、機能していない場合があります。確認用のウェブページもすべてにあるわけではなく、その有無もレジストラが決定します。ページが存在する場合、スクレイパーはそれを介してデータをリクエストします。
レジストラがTLDのみを所有し、サイトがSLD(第2レベル、例:co.uk, org.uk)で登録されるゾーンもあります。SLDの所有者は1人または複数いる場合がありますが、TLDのレジストラではありません。確認方法(WHOIS、RDAP、ウェブページ、またはそれらの組み合わせ、あるいはそのいずれもなし)は、SLDの所有者によって設定されます。
WHOISとRDAPのフィールド構成も、法律、レジストラのポリシー、および個人データに関する制限により異なる場合があります。しかし、全体的なセットは予測可能です:登録情報、日付、NS、レジストラ、ステータスなどです。
ウェブ経由で収集する場合、標準化はされていません。ドメインが登録されているかどうかは常に確認されます。それ以外は、レジストラがページに表示している内容に依存します。ほぼすべての項目が表示されることもあれば、登録の事実のみが表示されることもあります。
A-Parserの機能により、スクレイピング設定を保存して後で再利用(プリセット)したり、スクレイピングスケジュールを設定したりすることが可能です。クエリの自動増殖、ファイルからのサブクエリの置換、英数字の組み合わせやリストの総当たりを使用して、最大限の結果を得ることができます。
内蔵された強力なテンプレートエンジン Template Toolkit により、結果に必要なロジックを適用し、JSON、SQL、CSV を含む様々な形式で、必要な構造のまま結果を保存できます。
スクレイパーの活用事例
🔗 任意のデータの抽出
Net::Whoisで任意のデータを選択して抽出します
🔗 ドメインパラメータ
ドメインごとのパラメータ取得
🔗 ドメイン期限の通知
ドメインの登録期限終了についてTelegramで通知を受け取ります
🔗 メールアドレスベースの収集
Whoisサービスを通じてドメインのメールアドレスを収集できるプリセットです。
収集データ
以下のリストはWHOIS/RDAPの典型的なセットです。具体的なフィールドはサーバーの応答や法律によって異なります。ウェブ経由で収集する場合、登録の有無のみが保証され、その他のフィールドはオペレーターが公開している場合にのみ入力されます。
$registered— ドメインが登録されているかどうか$expire_date— ドメインの登録有効期限$creation_date— ドメインの登録日$free_date— ドメインの解放予定日$whoisserver— 使用されたWHOISサーバー(WHOISリクエスト時。RDAPの場合は空のことが多い)$rdapserver— RDAPサーバーのURL(RDAPリクエスト成功時)$registrar— ドメインレジストラ$updated_date— レコードの最終更新日$data— 生の応答:WHOISテキストまたはRDAP JSON- 配列
$ns(ネームサーバー):$ns.$i.server— NSサーバー名
- 配列
$statuses(ステータスリスト):$statuses.$i.status— ドメインステータス
機能
- ドメインゾーンに応じたRDAPまたはWHOISの自動選択(RDAP優先)
- ゾーンに動作するWHOIS/RDAPがないが、オペレーターのウェブページがある場合、そこからチェックを実行
- WHOIS/RDAPのフィールド構成は、サーバーの応答と法律に依存
- ウェブ経由での収集時は常にドメインの存在を確認。その他のフィールドはオペレーターが提供している場合のみ取得
- 一部のゾーン(TLDおよびSLD)にはWHOIS/RDAPもウェブページも存在しません。WHOISデータは利用できませんが、ドメインの存在は
Net::DNSを通じて確認されます - 国際化ドメイン(IDN、例: яндекс.рф)のサポート
ユースケース
- 空きドメインまたは間もなく解放されるドメインの収集
- ネームサーバー(NS)リストの収集
- ドメインステータスの取得
クエリ
クエリとして、検索対象のドメインを指定する必要があります。例:
a-parser.com
yandex.ru
google.com
vk.com
facebook.com
結果の出力例
A-Parserは、内蔵のテンプレートエンジン Template Toolkit により柔軟な結果フォーマットをサポートしており、任意の形式やCSV、JSONなどの構造化された形式で結果を出力できます。
デフォルト出力
結果フォーマット:
$query - registered: $registered, expire: $expire_date, creation: $creation_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
NSリストの出力
結果フォーマット:
$ns.format('$server\n')
結果の例:
demi.ns.cloudflare.com
vern.ns.cloudflare.com
ドメイン期限データをCSVで出力
結果フォーマット:
[% tools.CSVline(query, registered, expire_date, creation_date, updated_date, free_date, whoisserver, rdapserver, registrar) %]
結果の例(.com ドメイン、RDAP経由の回答 — whoisserver は空、rdapserver が入力済み):
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"
NSリストをCSVテーブルに出力
結果フォーマット:
[% FOREACH ns;
tools.CSVline(query, server);
END %]
結果の例:
a-parser.com,demi.ns.cloudflare.com
a-parser.com,vern.ns.cloudflare.com
結果をJSONにダンプ
共通結果形式:
[% 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 %]
開始テキスト:
[
終了テキスト:
]
結果の例 (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"
}]
タスクエディタで「Prepend text」と「Append text」のオプションを使用するには、「More options」を有効にする必要があります。
結果の処理
A-Parserではスクレイピング中に直接結果を処理できます。このセクションでは、Net::Whoisスクレイパーの最も一般的なケースを紹介します。
ドメイン登録業者の取得
WHOIS経由の回答では $p1.data フィールドにテキストが含まれ、RDAPでは JSON が含まれます。両方のケースで登録業者を取得するには、2つの結果ビルダーを追加します。
Result Builders (結果ビルダー)を追加し、ドロップダウンリストからソース: $p1.data を選択します。タイプ: RegEx Match を選択します。「正規表現」フィールドに Registrar:\s*(.+) と入力し、変数 registrarwhois に保存します。
再度Result Builders (結果ビルダー)を追加し、ドロップダウンリストからソース: $p1.data を選択します。タイプ: RegEx Match を選択します。「正規表現」フィールドに "entities"[\s\S]+?"vcardArray"[\s\S]+?"fn"[\s\S]+?"text"[\s\S]+?"([^"]+?)" と入力し、変数 registrarrdap に保存します。
Result format (結果フォーマット)に次を追加します: [% IF registrarrdap == 'none' %]$query - $registrarwhois[% ELSE %]$query - $registrarrdap[% END %] — RDAPで名前が見つからない場合(registrarrdap が none)、WHOISの値が出力され、それ以外はRDAPの値が出力されます。
サンプルをダウンロード
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
設定可能な項目
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
| Recursive query | ☐ | WHOIS の詳細バージョンを取得できます |
| WHOIS server | 独自の WHOIS サーバーを指定できます | |
| RDAP server | 独自の RDAP サーバーを指定できます | |
| Checking by DNS | ☑ | ドメインの IP の存在に基づいて、ドメインが登録されているか確認できます |
| Checking domains by DNS record | ☑ | IP を確認し、ステータスが ALLOCATED の場合はドメインが登録済みであると判断します。このオプションが無効な場合、IP の確認は行われません |
| Force DNS check for not found domains | ☑ | ドメインが未登録と判定された場合に強制的に再確認を行います |