2012-03-13 72 views
3

我正在编写一个使用nsIServerSocket监听套接字连接的Firefox扩展。我正在寻找扩展代码以编程方式学习运行Firefox扩展的机器的本地网络地址的方法。这些信息会通过带外网络传输到本地网络上的客户端,以便它可以打开到扩展的套接字连接。如何从Firefox扩展代码获取本地IP地址

我对此的研究迄今为止仅仅出现在希望通过DNS resolution或使用Java applets找到IP地址of loaded websites的个人,这对于FF扩展并不合适。在Geolocation API Mozilla开发的网页提到:

“的数据交换,包括WiFi接入点的数据,访问令牌(类似于2周的cookie),以及用户的IP地址”

但并不表示API直接访问用户的IP地址。

我现在唯一的想法是使用nsIProcess调用本地进程并从那里解析IP。这看起来非常黑客,并且必须在每个操作系统的基础上处理。即我运行ifconfig,netcfg,ipconfig?用什么参数?

有人知道更好的解决方案吗?

+0

感谢链接修复Bergi。 – Daniel 2012-03-14 04:01:25

回答

1

您使用nsIDNSService interface这里也 - 它有一个myHostName属性,可以这样解决:

var dns = Components.classes["@mozilla.org/network/dns-service;1"] 
        .getService(Components.interfaces.nsIDNSService); 
var myName = dns.myHostName; 
var record = dns.resolve(myName, 0); 
while (record.hasMore()) 
    alert(record.getNextAddrAsString()); 

你应该指望它产生多个地址,而不是所有的人都将是有效的 - 即使是在本地网络您至少会得到两个地址(IPv6和IPv4),此外您还可以获得Teredo地址,VMWare & Co.等公司安装的虚拟适配器的地址。

+0

谢谢。这正是我所期待的。我很欣赏关于多个接口地址的提醒。 – Daniel 2012-03-14 12:25:04

+0

嘿@弗拉基米尔 - 帕兰特,我知道这已经有一段时间了,但如果你知道答案,那真的会有所帮助。阅读完这篇文章后,这是否意味着即使您使用通过Firefox配置的匿名代理,任何Firefox插件都可能会读取本地IP地址?换句话说,尽管代理已经到位,插件仍然可以读取本地IP地址? – DomainsFeatured 2016-09-19 22:32:27

+1

@DomainsFeatured:Firefox附加组件目前不是沙盒,它们可以完全访问您的计算机 - 所以它们可以做很多事情。如果'nsIDNSService'不存在,它们可以运行外部命令来读出你的网络配置。或者他们可以暂时禁用代理设置。网络扩展将会改变这种情况,但即使如此,我还是会说,你最好相信你已经安装的加载项。好的一面是,附加软件由addons.mozilla进行审查。组织通常很好 - 审查确保他们做他们自称的事情。 – 2016-09-20 07:28:02

0

我敢打赌,Geolocation API中提到的IP地址不是本地计算机的IP地址。我的意思是,世界上的哪个地方是192.168.0.100,嗯?一般来说,这只是一条有用的信息。

由于您正在处理本地网络,您是否可以设置一个只打印客户地址的小型网页?然后,您可以通过请求该网页来了解您的IP。

+0

好点RE:Geolocation API。 我的扩展的目的/部署排除了假设我可以运行单独的服务来回显请求的IP。否则,这将是一个潜在的想法。谢谢! – Daniel 2012-03-14 04:01:04