一、JS獲取本機IP地址
在開發前端應用時,我們可能需要獲取訪問者的IP地址,以便顯示一些對應的信息,這時候我們可以通過JavaScript來獲取本機的IP地址。
//方法一:
function getIPAddress(){
return new Promise((resolve, reject)=>{
var RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection || window.msRTCPeerConnection;
var pc = new RTCPeerConnection({iceServers:[]}),
noop = function(){},
localIPs = {};
pc.createDataChannel('');
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice){
if(!ice || !ice.candidate || !ice.candidate.candidate) return;
let ip = /(192\.168|172\.16|10\.(\d{1,3})|([2][5][0-5]|[2][0-4][0-9]|[01]?[0-9][0-9]?)(\.([2][5][0-5]|[2][0-4][0-9]|[01]?[0-9][0-9]?)){2})/.exec(ice.candidate.candidate)[0];
if(!localIPs[ip]) resolve(ip);
localIPs[ip] = true;
};
});
}
通過RTCPeerConnection可以獲取到本地的IP地址,但是該方案存在一個局限性,即需要用戶允許瀏覽器訪問麥克風和攝像頭,否則獲取不到 IP地址。
//方法二:
function getIPAddress(){
return new Promise((resolve, reject)=>{
//使用第三方服務
$.getJSON("https://api.ipify.org?format=json", function(data){
resolve(data.ip);
});
});
}
該方法通過調用第三方web API獲取本地的IP地址,無需用戶授權,適用於大量數據獲取場景。
二、JS獲取本機IPv4地址
IPv4地址是網絡連接的基礎,更多的應用場景需要使用IPv4地址進行開發。
function getIPv4Address(){
return new Promise((resolve, reject) => {
//1.使用w3c api
window.RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
if (typeof window.RTCPeerConnection == 'undefined') {
//使用第三方服務
$.getJSON("https://ipv4.myexternalip.com/json", function(data){
resolve(data.ip);
});
}
else {
var pc = new RTCPeerConnection();
pc.createDataChannel('');
pc.createOffer(function(sdp){
pc.setLocalDescription(sdp, function() {});
}, function onerror(){});
pc.onicecandidate = function(ice) {
if (!ice || !ice.candidate || !ice.candidate.candidate) return;
var ip = /([0-9]{1,3}(.[0-9]{1,3}){3})/.exec(ice.candidate.candidate)[1];
resolve(ip);
};
}
});
}
三、JS獲取本機IPv6地址
IPv6地址是網絡連接的未來,對於全球範圍內分布的設備進行唯一標識不再是問題,而且IPv6地址的長度也比IPv4地址更長,可以支持更複雜的網絡應用場景。
function getIPv6Address(){
return new Promise((resolve, reject) => {
//使用第三方服務
$.getJSON("https://api6.ipify.org?format=json", function(data){
resolve(data.ip);
});
});
}
四、JS獲取本機MAC地址
MAC地址是設備唯一的物理地址,可以通過它來對設備進行唯一標識,而且它是網絡層面的,能夠直接與網絡的通信技術對接。
function getMACAddress(){
return new Promise((resolve, reject) => {
//使用第三方服務
$.getJSON("https://api.macvendors.com", function(data){
resolve(data);
});
});
}
五、JS獲取前端IP地址
前端IP地址是指客戶端的公網IP地址,即用戶真實連接到Internet的IP地址。
function getClientIPAddress(){
return new Promise((resolve, reject) => {
//使用第三方服務
$.getJSON("https://ipapi.co/json/", function(data){
resolve(data.ip);
});
});
}
綜上所述,JS獲取本機IP地址的方法有多種,可以通過調用第三方web API獲取,也可以通過瀏覽器的RTCPeerConnection對象獲取。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243242.html
微信掃一掃
支付寶掃一掃