JavaScript 获取用户公网 IP 地址 - 代码解析与应用
JavaScript 获取用户公网 IP 地址 - 代码解析与应用
本文将详细解析一段 JavaScript 代码,并阐述其在获取用户公网 IP 地址方面的应用。
代码解析
function getIPs(callback) {
var ip_dups = {};
var ips = []; // 定义一个数组,存放获取到的IP地址
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var useWebKit = !!window.webkitRTCPeerConnection;
if (!RTCPeerConnection) {
var win = iframe.contentWindow;
RTCPeerConnection = win.RTCPeerConnection
|| win.mozRTCPeerConnection
|| win.webkitRTCPeerConnection;
useWebKit = !!win.webkitRTCPeerConnection;
}
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
var servers = {iceServers: [{urls: 'stun:stun.l.google.com:19302'}]};
var pc = new RTCPeerConnection(servers, mediaConstraints);
function handleCandidate(candidate) {
var ip_regex = /([0-9]{1,3}(.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/;
var ip_addr = ip_regex.exec(candidate) && ip_regex.exec(candidate)[1];
if (!ip_addr) return;
if (ip_dups[ip_addr] === undefined) {
ips.push(ip_addr); // 将获取到的IP地址存入数组中
callback(ip_addr);
}
ip_dups[ip_addr] = true;
}
pc.onicecandidate = function (ice) {
if (ice.candidate)
handleCandidate(ice.candidate.candidate);
};
pc.createDataChannel('');
pc.createOffer(function (result) {
pc.setLocalDescription(result, function () {}, function () {});
}, function () {});
setTimeout(function () {
var lines = pc.localDescription.sdp.split('
');
lines.forEach(function (line) {
if (line.indexOf('a=candidate:') === 0)
handleCandidate(line);
});
}, 1000);
}
getIPs(function (ip) {
ip && console.log(ip);
});
console.log(ips); // 在这里进行处理
这段代码主要利用了 WebRTC 的 RTCPeerConnection 对象来实现获取用户公网 IP 地址。代码逻辑如下:
- 创建
RTCPeerConnection对象: 通过RTCPeerConnection对象建立一个连接,并指定服务器地址和媒体约束。 - 监听候选 IP 地址: 监听
onicecandidate事件,当有新的候选 IP 地址出现时,将其提取并放入ips数组中。 - 处理候选 IP 地址: 对提取到的 IP 地址进行判断,去除重复地址,并通过回调函数
callback将其返回。
应用场景
获取用户公网 IP 地址在以下场景中可以发挥作用:
- 地理定位: 根据 IP 地址可以大致定位用户所在地。
- 用户行为分析: 可以记录用户访问的 IP 地址,用于分析用户行为,例如访问频率、访问时间等。
- 反作弊: 结合其他信息,可以用于识别恶意用户,防止作弊行为。
代码示例
function getIPs(callback) {
// ... (代码内容与上面相同)
}
// 获取用户公网 IP 地址并输出到控制台
getIPs(function (ip) {
ip && console.log('您的公网 IP 地址为:' + ip);
});
注意事项
- 由于网络环境的影响,获取到的 IP 地址可能不准确。
- 在使用此代码时,需要确保用户浏览器支持 WebRTC 技术。
总结
本文介绍了使用 JavaScript 代码获取用户公网 IP 地址的方法,并提供代码示例和应用场景说明。希望对您理解和应用此技术有所帮助。
原文地址: https://www.cveoy.top/t/topic/m48B 著作权归作者所有。请勿转载和采集!