我正在编写一个使用 nsIServerSocket
的 Firefox 扩展监听套接字连接。我正在寻找一种方法让扩展代码以编程方式了解运行 Firefox 扩展的机器的本地网络地址。此信息以带外方式传送到本地网络上的客户端,以便它可以打开到扩展的套接字连接。
到目前为止,我对此的研究只找到了希望找到 IP 地址 of loaded websites 的个人。通过 DNS resolution或使用 Java applets ) 不适用于 FF 扩展。 Geolocation API 上的 Mozilla 开发者页面提及:
"data is exchanged including WiFi Access Point data, an access token (similar to a 2 week cookie), and the user's IP address"
但不表示直接访问用户IP地址的API。
此时我唯一的想法是使用 nsIProcess
调用本地进程并从那里解析 IP。这看起来非常骇人听闻,必须在每个操作系统的基础上进行处理。 IE。运行 ifconfig、netcfg、ipconfig?用什么参数?
有人知道更好的解决方案吗?
最佳答案
您使用 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. 等安装的虚拟适配器。
关于javascript - 如何从 Firefox 扩展代码中获取本地 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689632/