解析せずにWHOISデータフィールドを取得しますか?

解析せずにWHOISデータフィールドを取得しますか?

一般的なGNU / Linuxディストリビューション(Fedora / Debian / Ubuntu / etcなど)で利用可能なコマンドラインツールを使用して、特定のWHOISフィールド(登録者の組織名など)の値を取得する一般的な方法はありますか?理想的にはビルドする必要はありません。各レジストリ出力の違いを処理するためのハードコーディングされたカスタムWHOISパーサ?

コマンドの出力がwhois一貫していないように見えるので、これについて尋ねる価値があるようです。たとえば、次を比較します。

$ whois trigger.io

[...]

Owner OrgName : Amir Nathoo

[...]

そして:

$ whois facebook.com

[...]

Registrant Organization: Facebook, Inc.

[...]

代わりに、いくつかのコマンドに引数として渡すことができます。

  • ドメイン名
  • 必須入力

出力を必須フィールドの値にします。たとえば、上記の例に基づいて、次のようになります。

$ some_whois_command -field organization_name trigger.io
Amir Nathoo

$ some_whois_command -field organization_name facebook.com
Facebook, Inc.

可能ですか?

理想的には、、、および/またはの適切な使用などのwhoisコマンド中心のソリューションが必要です。なぜなら、これらのオプションを効果的に使用する方法を学びたいからです。しかし、必要に応じて別の正しい解決策を受け入れます。-i-q-t-v

答え1

問題には少なくとも2つの側面があるようです。

  • WHOIS応答は共通スキーマを共有しません。
  • WHOISレスポンスを解析し、そのフィールドを単一のスキーマにマッピングする(たとえば、適切なオントロジーを使用する)ことができるWHOISクライアントが不足しています。これルビー・フイズプロジェクトは私が見つけたものの中で最も広範な努力です。目的は500を超えるさまざまなWHOISサーバーのそれぞれにパーサーを提供します。、開発者は大きな功績を認められる資格がありますが、まだ進行中の作業です。

これは残念な状況です。

これIETFこの問題と他のWHOIS問題に提案されているソリューションは次のとおりです。RDAP(登録データアクセスプロトコル)

引用するRFC 7485、RDAPの基本原則を説明します。

この文書が発行されると、
ドメイン名スペースには200を超える国コード最上位ドメイン(ccTLD)と400を超える一般トップレベルドメイン(gTLD)があります。
ドメイン名
登録機関によって WHOIS 応答オブジェクトと形式が異なる場合があります。
各オブジェクトに対して単一のデータモデルを構築するには、これらすべてのデータ型の共通の理解が
重要です。

(強調します。)

残念ながら、ほとんどの(すべて?)TLD登録機関はサブドメインにWHOISサーバーを提供しますが、今日まで、2 つのTLD 登録機関のみがサブドメインに対して正式に RDAP サーバーをデプロイしています。:CZNICは.czドメインに適しており、NIC Argentinaは.arドメインに適しています。したがって、これはまだ広く適用可能なTLDソリューションではありません。我々は、他のすべてのレジストリがすぐにRDAPサーバーを展開することを望むだけです。

ソフトウェアの場合、これまでPOSIXシステムで見つけた唯一のRDAPコマンドラインクライアントは次のとおりです。nicinfo

答え2

Pythonを使用できます

 pip install whois

例えば、

#!/bin/python

import whois
print whois.whois('www.facebook.com')['city']

答え3

どのTLDに興味がありますか? .com、.net、および.orgをすばやく確認すると、実際のデータフィールドの名前は同じです。 whois foo.org | grep "registrant organization:" または興味のあるすべてのフィールドを使用すると簡単です。

次のスクリプトが必要な場合

#!/bin/bash

if [ $# -ne 2 ]
then
  echo Usage:  $0 fieldcode domain
  exit
fi

case $1 in 
  "ro")
     whois $2 | grep "Registrant Organization:"
  ;;
  "te")
     whois $2 | grep "Tech Email:"
  ;;
esac

# or use simple if-thens
if [ $1 == "r" ]
then
  whois $2 | grep "Registrant "
fi

これは次のような出力を提供します。

$ ./whoisg r myfqdn.org
Registrant ID: go2016965629
Registrant Name: Contact Privacy Inc. Customer 1241082755
Registrant Organization: Contact Privacy Inc. Customer 1241082755
Registrant Street: 96 Mowat Ave
Registrant City: Toronto
Registrant State/Province: ON
Registrant Postal Code: M4K 3K1
Registrant Country: CA
Registrant Phone: +1.4165385487
Registrant Phone Ext:
Registrant Fax:
Registrant Fax Ext:
Registrant Email: [email protected]

または

$ ./whoisg te myfqdn.org
Tech Email: [email protected]

ファタイ

関連情報