在JavaScript中区分内部网和外部IP地址

在JavaScript中区分内部网和外部IP地址,java,javascript,google-app-engine,google-chrome-extension,firefox-addon,Java,Javascript,Google App Engine,Google Chrome Extension,Firefox Addon,我正在编写一个浏览器插件(Chrome和Firefox),简而言之,它根据用户访问的每个页面的内容进行“一些计算”(即,我们不是在谈论用户自己的页面),为用户提供分数。在得分特别高的情况下,页面标题、页面URL等(自动)提交给中央服务,以便显示一种排行表 所有这些都非常有效,但我希望——在可能的情况下——从用户碰巧访问的内部网页面中去除所有流量。(我们不存储或传输任何页面内容,但存在隐私问题,我们不希望与内部/公司文档有任何关系。) 理论上,我可以(以合理的准确度)计算出一个IP是否可能来自in

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

所有这些都非常有效,但我希望——在可能的情况下——从用户碰巧访问的内部网页面中去除所有流量。(我们不存储或传输任何页面内容,但存在隐私问题,我们不希望与内部/公司文档有任何关系。)

理论上,我可以(以合理的准确度)计算出一个IP是否可能来自intranet@,但由于DOM不提供对文档主机IP的访问,考虑到查找服务可能会停止/缓慢,尝试动态确定IP然后应用这些IP规则是否可行

一个更简单的替代方案——比如文档主机名TLD的模式匹配——是否也同样好

有什么建议吗

更新:

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

您应该使用它来解析Firefox中的主机名。按照这些思路:

var threadManager=Components.classes[“@mozilla.org/thread manager;1”]
.getService(组件.接口.管理器);
var dnsService=Components.classes[“@mozilla.org/network/dns service;1”]
.createInstance(Components.interfaces.nsIDNSService);
变量侦听器={
onLookupComplete:功能(请求、记录、状态)
{
if(组件发布代码(状态))
警报(“主机IP地址:+record.getNextAddrAsString());
其他的
警报(“查找失败”);
}
};
dnsService.asyncResolve(“www.google.com”,0,侦听器,
threadManager.currentThread);
这通常是一个非常快的操作,因为主机名已经被缓存。注意:如果使用附加SDK,则必须使用相应的别名替换对
组件
属性的访问


至于Chrome,我怀疑你能否在那里妥善解决这个问题。正如Korvin Szanto在评论中指出的那样,任何主机名都可以指向本地地址。Chrome不会让你获得它所访问的IP地址。

任何人都可以更改其主机文件,将域指向本地主机,我不知道你将如何过滤掉,因为从其他来源检查域不会反映我自己的主机文件。没错,尽管我不太担心0.1%的情况-这不一定是防弹的,因为我没有捕获敏感数据。谢谢。我想在服务器上完成这一切的想法已经被谷歌应用程序引擎(Google App Engine)阻止了,不允许DNS查找,因此我将在Firefox上使用你的建议(现在刚刚开始工作),并将使用Chrome上的服务执行异步查找。