メインコンテンツへスキップ

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、レジストラ、ステータスなどです。

ウェブ経由で収集する場合、標準化はされていません。ドメインが登録されているかどうかは常に確認されます。それ以外は、レジストラがページに表示している内容に依存します。ほぼすべての項目が表示されることもあれば、登録の事実のみが表示されることもあります。

詳細: RDAP (英語), WHOIS.

A-Parserの機能により、スクレイピング設定を保存して後で再利用(プリセット)したり、スクレイピングスケジュールを設定したりすることが可能です。クエリの自動増殖、ファイルからのサブクエリの置換、英数字の組み合わせやリストの総当たりを使用して、最大限の結果を得ることができます。

内蔵された強力なテンプレートエンジン Template Toolkit により、結果に必要なロジックを適用し、JSON、SQL、CSV を含む様々な形式で、必要な構造のまま結果を保存できます。

スクレイパーの活用事例

収集データ

以下のリストは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::DNSNet::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で名前が見つからない場合(registrarrdapnone)、WHOISの値が出力され、それ以外はRDAPの値が出力されます。

サンプルをダウンロード

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

設定可能な項目

パラメータデフォルト値説明
Recursive queryWHOIS の詳細バージョンを取得できます
WHOIS server独自の WHOIS サーバーを指定できます
RDAP server独自の RDAP サーバーを指定できます
Checking by DNSドメインの IP の存在に基づいて、ドメインが登録されているか確認できます
Checking domains by DNS recordIP を確認し、ステータスが ALLOCATED の場合はドメインが登録済みであると判断します。このオプションが無効な場合、IP の確認は行われません
Force DNS check for not found domainsドメインが未登録と判定された場合に強制的に再確認を行います