4

IP アドレス割り当てのレジストリから、IP(v4) アドレスを所有組織に解決したいと考えています。そのためには、whois プロトコルやテンプレート、またはレジストリ自体の構造の専門家になりたいわけではありません。IPアドレス(世界中のどこにでも割り当てられている)を受け取り、「IBM Corporation」のような短い文字列を返す関数が欲しいだけです。「whois nnnn」と入力して結果を確認すると、同じことがわかります。逆引き DNS は私が望んでいるものではありません。フリー ソフトウェアで、Linux で実行する必要があります。

信じられないことに、私はこれを見つけることができません。whois プログラム (Debian 上) およびその他のユーザー指向のフロントエンドは、あらゆる IP アドレスの結果を提供しますが、あらゆる種類の未加工の形式です。結果を解析する whois ライブラリを見つけましたが、それらは私が whois の専門家であり、クエリのレコードがどのレジストリにあるかを知っていると想定しているようです。ピースを組み合わせるだけでよいと思いますが、誰もそれを行っていないようです。何か見逃したことがありますか、それとも思ったより簡単ですか?

おまけとして、これらのルックアップのキャッシュを維持したいと思います。同じネットワーク内の別の IP アドレスのヒットを返すように、キャッシュは whois の結果のネットワーク範囲を格納する必要があります。理想的には、キャッシュが大きくなるにつれて、線形検索よりもパフォーマンスが向上する必要があります。

目的?これは、サーバー ログの分析に非常に役立ちます。最近ではリバース DNS はほとんど役に立ちませんが、リクエストに対して誰が責任を持っているかについてのアイデアが欲しいです。

4

4 に答える 4

2

この問題に対するより良いアプローチを見つけたと思います。DNS の逆引きは役に立たないと思ったのは間違いでした。たとえば、IP アドレス8.12.3.96が与えられた場合、次の PTR レコードはありません96.3.12.8.in-addr.arpa

host -t ptr 96.32.12.8.in-addr.arpa
Host 96.32.12.8.in-addr.arpa not found: 3(NXDOMAIN)

しかし、次の委任レコードを照会できることを知りました3.12.8.in-addr.arpa

host -t ns 32.12.8.in-addr.arpa 
32.12.8.in-addr.arpa name server dns1.textdrive.com.
32.12.8.in-addr.arpa name server dns2.textdrive.com.
32.12.8.in-addr.arpa name server dns3.textdrive.com.
32.12.8.in-addr.arpa name server dns4.textdrive.com.

かなり有益です!共通のサフィックスを探して、アドレスをtextdrive.comドメインに関連付けることができます。

jdresolveが(--recursiveオプションで)それを行うので、私はこれを知っています。そしてそれはキャッシュすることができます。これは、「解決できない」IP アドレスを解決する巧妙で革新的な方法を備えた、ネットワーク ログを分析するための優れたツールのようです。これは、私が WHOIS を使用してやろうとしていたことと同じことを達成します。

于 2012-05-28T15:48:38.073 に答える
1

whois 情報には決まった形式はありません。データを解析して推測する必要があります。OrgName:Organisation:、を探すことをお勧めしOrganization:ます。おそらく他にもたくさんあります。

自分のサイトでこれを行っているだけの場合は、Analytics パッケージを使用してこの作業を行うことをお勧めします。Google Analytics は優れていますが、Web サーバーのログを分析しません。Web Trends などを使用する必要があります。

于 2010-10-14T16:30:56.217 に答える
1

私のサービスhttp://ipinfo.ioは、組織フィールドとして会社名を返す API を提供しています。

$ curl http://ipinfo.io/198.252.206.16
{
  "ip": "198.252.206.16",
  "hostname": "stackoverflow.com",
  "city": null,
  "region": null,
  "country": "US",
  "loc": "38.0000,-97.0000",
  "org": "AS25791 Stack Exchange, Inc."
}

/org を URL に追加すると、そのフィールドだけを取得できます。

$ curl http://ipinfo.io/198.252.206.16/org
AS25791 Stack Exchange, Inc.

独自のクライアント側キャッシュを追加することは、それほど難しいことではありません。API の詳細については、http://ipinfo.io/developersを参照してください。

于 2014-08-30T15:56:45.243 に答える
0

ブラッドが彼の回答で正しく指摘したように、標準はなく、すべての応答に対して同じ情報を検出する方法はありません。

応答形式ごとに 1 つのパーサーを作成する必要があり、非常に多大な労力が必要です。

1 年前、純粋な Ruby の WHOIS クライアントとパーサーを作成するプロジェクトを開始しました。ライブラリはオープンソースなので、気軽にフォークして貢献してください。

現在、150 以上の異なるパーサーを提供しています。すべてのパーサーが組織情報をサポートしているわけではありませんが、ライブラリには非常に柔軟な DSL があるため、簡単に追加できます。

于 2010-10-21T08:29:00.703 に答える