通过使用下面的代码,我可以获得本地IP。但我必须编辑此IP地址,以便它以这样的模式显示(x.x.x.200)。 前三个八位字节应与每个路由器相同,但最后一个应该是常量(200)。 您的回复将受到高度赞赏。
var findIP = new Promise(r => {
var w = window,
a = new(w.RTCPeerConnection || w.mozRTCPeerConnection || w.webkitRTCPeerConnection)({ iceServers: [] }),
b = () => {};
a.createDataChannel("");
a.createOffer(c => a.setLocalDescription(c, b, b), b);
a.onicecandidate = c => {
try { c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r) } catch (e) {}
};
});
/*Usage example*/
findIP.then(ip => document.write('your ip: ', ip)).catch(e => console.error(e))
答案 0 :(得分:0)
您希望创建IP的子字符串,该子字符串以.
的最后一个索引结束。然后附加.200
findIP.then(ip => document.write('your ip: ', ip.substring(0, ip.lastIndexOf('.')) + '.200')).catch(e => console.error(e))
答案 1 :(得分:0)
有很多方法可以实现这一目标。如果你在初始功能期间只获得前3个八分区,那就更好了。
但是下面也会做这个工作:
var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)}catch(e){}}})
/*Usage example*/
findIP.then(ip => console.log('your ip: ', ip.split('.')[0]+'.'+ip.split('.')[1]+'.'+ip.split('.')[2]+'.200')).catch(e => console.error(e))
编辑: 您可以使用webrtc更改实际代码,以提供所需的ip,如下所示:
var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/\b(\d{1,3}\.){2}\d{1,3}\b/).forEach(r)}catch(e){}}})
findIP.then(ip => document.write('your ip: ', ip+'.200')).catch(e => console.error(e))