[英]JavaScript detection of LAN IP address
我一直在使用以下代碼來檢測運行某些專有軟件的客戶端的LAN IP地址(請不要“我不應該這樣做”,我沒有編寫代碼)。
function ip_local()
{
var ip = false;
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection || false;
if (window.RTCPeerConnection)
{
ip = [];
var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
pc.createDataChannel('');
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(event)
{
if (event && event.candidate && event.candidate.candidate)
{
var s = event.candidate.candidate.split('\n');
ip.push(s[0].split(' ')[4]);
}
}
}
return ip;
}
ip_local();
這是從另一個StackOverflow帖子中獲得的,直到今天下午,該代碼已經可以正常工作一年半了。
我的本地IP似乎被檢測為153b3a68-e3fb-4451-9717-d9b3bc2b5c60.local,而不是通常的192.168.0.11。
編輯:如果有人在乎,這個問題是無法繞過的,必須通過服務器端語言來完成,就我而言,我最終將PHP用作問題的臨時“創可貼”。
這對我的應用程序來說是個問題,因為它會檢測主機上是否正在運行本地服務器。如果無法檢測到LAN IP地址,它將無法執行此操作。
這是新安全標准的一部分,可以防止私有IP地址泄漏。
另請參閱: https : //tools.ietf.org/html/draft-ietf-rtcweb-mdns-ice-candidates-02
摘要:
如[IPHandling]中的詳細說明,默認情況下公開客戶端專用IP地址可最大程度地提高在兩個客戶端之間成功建立直接對等連接的可能性,但會為用戶指紋創建重要的表面。 [IPHandling]認識到此問題,但也承認目前沒有解決此問題的方法; 選擇使用模式3解決隱私問題的實現通常會遭受WebRTC應用程序中連接失敗或連接欠佳的困擾。 在非托管網絡(通常是家庭或小型辦公室)中,這尤其是個問題,在這些網絡中可能不支持NAT環回。
本文檔通過為每個本地私有IP地址注冊臨時mDNS名稱,然后在收集ICE候選者時向Web應用程序提供這些名稱而不是IP地址,來提出針對此問題的整體解決方案。 WebRTC實現將這些名稱解析為IP地址,並照常執行ICE處理,但實際的IP地址未公開給Web應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.