2011-10-04 81 views

回答

2

你总是可以使用freegeoip服务,我最喜欢的实现方式之一把它的如下:

var geoip = function(data){ 
    if (data.region_name.length > 0) { 
     console.log('Your external IP:', data.ip); 
    } 
} 
var el = document.createElement('script'); 
el.src = 'http://freegeoip.net/json/?callback=geoip'; 
document.body.appendChild(el); 
+0

为什么需要依赖第三方服务器?这不会没有互联网连接工作! –

+0

在撰写本文时,Chrome不允许在扩展中访问您的DNS设置。这已在过去5年更新。 – buzzedword

2

是的,但由于NAT你无法知道它没有网络请求。你可以试试我的http://external-ip.appspot.com/,我为同一任务作出

+0

酷兄弟我要添加到我的代码。 – Max

1

YES!您可以通过WebRTC API获取本地网络的IP地址。 您可以将此API用于任何Web应用程序,而不仅仅是Chrome扩展。

<script> 

function getMyLocalIP(mCallback) { 
    var all_ip = []; 

    var RTCPeerConnection = window.RTCPeerConnection || 
     window.webkitRTCPeerConnection || window.mozRTCPeerConnection; 

    var pc = new RTCPeerConnection({ 
     iceServers: [] 
    }); 

    pc.createDataChannel(''); 

    pc.onicecandidate = function(e) { 

     if (!e.candidate) { 
      mCallback(all_ip); 
      return; 
     } 
     var ip = /^candidate:.+ (\S+) \d+ typ/.exec(e.candidate.candidate)[1]; 
     if (all_ip.indexOf(ip) == -1) 
      all_ip.push(ip); 
    }; 
    pc.createOffer(function(sdp) { 
     pc.setLocalDescription(sdp); 
    }, function onerror() {}); 
} 
getMyLocalIP(function(ip_array) { 
    document.body.textContent = 'My Local IP addresses:\n ' + ip_array.join('\n '); 
}); 

<body> Output here... </body> 

希望它能帮助!