如何从Firefox扩展代码获取本地IP

时间:2012-03-13 18:08:46

标签: javascript sockets firefox firefox-addon

我正在编写一个使用nsIServerSocket来监听套接字连接的Firefox扩展。我正在寻找扩展代码的方法,以编程方式学习运行Firefox扩展的机器的本地网络地址。此信息在带外传送到本地网络上的客户端,以便它可以打开与分机的套接字连接。

到目前为止,我对此的研究只发现了希望通过of loaded websites或使用DNS resolution找到IP地址Java applets而不适合FF的个人延期。 Geolocation API上的Mozilla开发者页面提到:

  

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

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

此时我唯一的想法是使用nsIProcess调用本地进程并从那里解析IP。这似乎是非常hackish,并且必须在每个操作系统的基础上处理。即运行ifconfig,netcfg,ipconfig?用什么args?

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

2 个答案:

答案 0 :(得分: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安装的虚拟适配器公司等。

答案 1 :(得分:0)

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

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