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

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で名前が見つからない場合(registrarrdap が none)、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 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☑ドメインが未登録と判定された場合に強制的に再確認を行います