0

私はブラウザアドオン(ChromeとFirefox)を書いています。これは、一言で言えば、ユーザーがアクセスする各ページのコンテンツに基づいて「いくつかの計算」を行い(つまり、ユーザー自身のページについて話しているのではありません)、スコアを持つユーザー。特に高得点の場合は、ページタイトルやページURLなどを中央サービスに(自動で)送信し、リーグ表のようなものを表示できるようにします。

これらはすべて完全に機能しますが、可能であれば、ユーザーがたまたまアクセスするイントラネットのページからすべてのトラフィックを取り除きたいと思います。(ページのコンテンツを保存または送信することはありませんが、プライバシーの懸念があり、社内/企業のドキュメントとは何の関係もありません。)

理論的には、IPがイントラネットからのものである可能性が高いかどうかを(妥当な精度で)判断できます@イントラネットと公式IPアドレスを区別しますが、DOMはドキュメントのホストIPへのアクセスを提供しないため、ルックアップサービスがダウン/低速になる可能性がある場合、その場でIPを決定し、それらのIPルールを適用することは実用的ですか?

ドキュメントのホスト名のTLDのパターンマッチングなど、より単純な代替手段もほぼ同じくらい良いでしょうか?

助言がありますか?

アップデート:

「ページの統計情報が送信されたら、サーバーでIPチェックを実行し、IPが内部範囲内にない場合にのみ送信を完了します。これは、はるかに簡単です」と自分で答えようとしていました。...残念ながら、これはできません。バックエンドはGoogle AppEngine [Java]であり、InetAddressクラスが制限されているため、任意のIPルックアップを行うことはできません。

4

1 に答える 1

2

Firefoxでホスト名を解決するには、nsIDNSServiceを使用する必要があります。これらの線に沿って:

var threadManager = Components.classes["@mozilla.org/thread-manager;1"]
                              .getService(Components.interfaces.nsIThreadManager);
var dnsService = Components.classes["@mozilla.org/network/dns-service;1"]
                           .createInstance(Components.interfaces.nsIDNSService);
var listener = {
  onLookupComplete: function(request, record, status)
  {
    if (Components.isSuccessCode(status))
      alert("Host IP address: " + record.getNextAddrAsString());
    else
      alert("Lookup failed");
  }
};
dnsService.asyncResolve("www.google.com", 0, listener,
                        threadManager.currentThread);

ホスト名はすでにキャッシュされているため、これは通常、非常に高速な操作です。注:アドオンSDKを使用する場合は、Chrome権限を使用Componentsし、プロパティへのアクセスをそれぞれのエイリアスに置き換える必要があります。

Chromeに関しては、この問題を適切に解決できるとは思えません。Korvin Szantoがコメントで述べているように、どのホスト名もローカルアドレスを指している可能性があります。また、Chromeでは通信先のIPアドレスを取得できません。

于 2012-05-08T21:28:10.977 に答える