0

我正在编写一个浏览器插件(Chrome 和 Firefox),简而言之,它会根据用户访问的每个页面的内容(即我们不是在谈论用户自己的页面)进行“一些计算”,呈现有分数的用户。在得分特别高的情况下,将页面标题、页面 URL 等(自动)提交给中央服务,以便显示一种排名表。

所有这一切都完美无缺,但我希望 - 在可能的情况下 -从我们的用户碰巧访问的 Intranet 页面中删除所有流量。(我们不存储或传输任何页面内容,但存在隐私问题,我们不希望与内部/公司文件有任何关系。)

从理论上讲,我可以计算出(以合理的准确度)IP 是否可能来自 Intranet @区分 Intranet 和官方 IP 地址之间,但由于 DOM 不提供对文档主机 IP 的访问,因此是考虑到查找服务可能会停止/缓慢,尝试即时确定 IP 然后应用这些 IP 规则是否可行?

一个更简单的替代方案(例如文档主机名的 TLD 的模式匹配)几乎一样好吗?

有什么建议么?

更新:

我正准备自己回答这个问题:“我将在提交页面统计信息时在服务器上进行 IP 检查,并且只有在 IP 不在内部范围内时才完成提交——这要容易得多。” ...不幸的是我不能这样做:因为我的后端是 Google AppEngine [Java] 并且InetAddress类受到限制,我不能进行任意 IP 查找。

4

1 回答 1

2

您应该使用nsIDNSService来解析 Firefox 中的主机名。沿着这些思路:

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 回答