2012-03-13 151 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