前端獲取IP地址幾種常見的方法及其代碼實(shí)例
前言
前端獲取IP地址有多種方法,可以通過(guò)第三方API、WebRTC、服務(wù)器代理等方式實(shí)現(xiàn)。以下是幾種常見的方法及其代碼實(shí)例。
使用第三方API獲取IP地址
第三方API是最簡(jiǎn)單的方式,通常免費(fèi)且無(wú)需復(fù)雜配置。常用的API包括ipify、ipapi等。
fetch('https://api.ipify.org?format=json')
.then(response => response.json())
.then(data => console.log('IP地址:', data.ip))
.catch(error => console.error('獲取IP失敗:', error));
fetch('https://ipapi.co/json/')
.then(response => response.json())
.then(data => console.log('IP地址:', data.ip))
.catch(error => console.error('獲取IP失敗:', error));
這些API返回JSON格式的數(shù)據(jù),包含IP地址及其他信息(如地理位置、ISP等)。
通過(guò)WebRTC獲取本地IP地址
WebRTC可以獲取客戶端的本地IP地址,但通常只能獲取內(nèi)網(wǎng)IP,而非公網(wǎng)IP。以下是通過(guò)WebRTC獲取本地IP的代碼:
const getLocalIP = async () => {
const peerConnection = new RTCPeerConnection({ iceServers: [] });
peerConnection.createDataChannel('');
peerConnection.createOffer()
.then(offer => peerConnection.setLocalDescription(offer))
.catch(error => console.error('WebRTC錯(cuò)誤:', error));
peerConnection.onicecandidate = (event) => {
if (event.candidate) {
const ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/;
const ipMatch = event.candidate.candidate.match(ipRegex);
if (ipMatch) {
console.log('本地IP地址:', ipMatch[1]);
peerConnection.close();
}
}
};
};
getLocalIP();
注意:WebRTC可能因?yàn)g覽器隱私策略受限,需在HTTPS環(huán)境或localhost下運(yùn)行。
通過(guò)服務(wù)器代理獲取IP地址
如果前端無(wú)法直接獲取IP,可以通過(guò)后端服務(wù)獲取,前端調(diào)用API即可。以下是一個(gè)簡(jiǎn)單的Node.js后端示例:
// 后端代碼(Node.js + Express)
const express = require('express');
const app = express();
app.get('/get-ip', (req, res) => {
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
res.json({ ip });
});
app.listen(3000, () => console.log('服務(wù)器運(yùn)行中'));
前端調(diào)用:
fetch('http://localhost:3000/get-ip')
.then(response => response.json())
.then(data => console.log('IP地址:', data.ip))
.catch(error => console.error('獲取IP失敗:', error));
使用CDN獲取IP地址
部分CDN服務(wù)(如Cloudflare)會(huì)在請(qǐng)求頭中傳遞客戶端IP。前端可以通過(guò)讀取請(qǐng)求頭獲取:
fetch('https://example.com/api/get-ip', {
headers: { 'Accept': 'application/json' }
})
.then(response => response.json())
.then(data => console.log('IP地址:', data.ip));
后端需配置CDN傳遞IP頭信息(如CF-Connecting-IP或X-Forwarded-For)。
通過(guò)DNS查詢獲取IP地址
通過(guò)DNS查詢可以獲取客戶端的大致地理位置,但無(wú)法直接獲取IP。以下是一個(gè)示例:
const hostname = window.location.hostname;
const dnsLookup = async () => {
const response = await fetch(`https://dns.google/resolve?name=${hostname}`);
const data = await response.json();
console.log('DNS查詢結(jié)果:', data);
};
dnsLookup();
這種方法主要用于調(diào)試,實(shí)際應(yīng)用較少。
總結(jié)
前端獲取IP地址的方法多種多樣,具體選擇需根據(jù)場(chǎng)景決定:
- 第三方API簡(jiǎn)單易用,適合快速獲取公網(wǎng)IP。
- WebRTC適合獲取本地IP,但受隱私策略限制。
- 服務(wù)器代理和CDN適合需要精確控制的場(chǎng)景。
- DNS查詢適用性較低,通常不推薦。
到此這篇關(guān)于前端獲取IP地址幾種常見的方法及其代碼實(shí)例的文章就介紹到這了,更多相關(guān)前端獲取IP地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js 獲取范圍內(nèi)的隨機(jī)數(shù)實(shí)例代碼
下面小編就為大家?guī)?lái)一篇js 獲取范圍內(nèi)的隨機(jī)數(shù)實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
JavaScript實(shí)現(xiàn)的encode64加密算法實(shí)例分析
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的encode64加密算法,實(shí)例分析了javascript處理encode64編碼針對(duì)字符串加密的技巧,非常簡(jiǎn)潔實(shí)用,需要的朋友可以參考下2015-04-04
IE中圖片的onload事件無(wú)效問(wèn)題和解決方法
這篇文章主要介紹了IE中圖片的onload事件無(wú)效問(wèn)題和解決方法,這是一個(gè)很經(jīng)典的問(wèn)題,其實(shí)只需要調(diào)換一下代碼順序即可解決,需要的朋友可以參考下2014-06-06
微信小程序中使用Async-await方法異步請(qǐng)求變?yōu)橥秸?qǐng)求方法
這篇文章主要介紹了微信小程序中使用Async-await方法異步請(qǐng)求變?yōu)橥秸?qǐng)求方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
跟我學(xué)習(xí)javascript的undefined與null
跟我學(xué)習(xí)javascript的undefined與null,從定義上理解null和undefined,告訴大家提高undefined性能的方法,感興趣的小伙伴們可以參考一下2015-11-11
javascript 發(fā)布-訂閱模式 實(shí)例詳解
這篇文章主要介紹了javascript 發(fā)布-訂閱模式,結(jié)合實(shí)例形式詳細(xì)分析了javascript發(fā)布-訂閱模式基本功能、原理、實(shí)現(xiàn)方法與相關(guān)使用技巧,需要的朋友可以參考下2023-06-06
jQuery右下角旋轉(zhuǎn)環(huán)狀菜單特效代碼
jquery實(shí)現(xiàn)右下角旋轉(zhuǎn)環(huán)形菜單特效代碼,是固定在頁(yè)面右下角位置,當(dāng)用戶點(diǎn)擊了主菜單按鈕后,子菜單項(xiàng)會(huì)以環(huán)狀旋轉(zhuǎn)進(jìn)入頁(yè)面,并使用animate.css制作動(dòng)畫效果,有需要的朋友可以參考下2015-08-08
javascript實(shí)現(xiàn)左右控制無(wú)縫滾動(dòng)
這篇文章主要介紹了javascript實(shí)現(xiàn)左右控制無(wú)縫滾動(dòng)的方法及示例代碼,需要的朋友可以參考下2014-12-12

