js实现ip
获取客户端IP地址(前端JavaScript)
在浏览器环境中,JavaScript无法直接获取用户的真实IP地址,但可以通过以下方法获取客户端IP的近似信息:
使用WebRTC获取本地IP
function getLocalIP() {
return new Promise((resolve, reject) => {
const RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
const pc = new RTCPeerConnection({ iceServers: [] });
const noop = () => {};
pc.createDataChannel('');
pc.createOffer().then(offer => pc.setLocalDescription(offer, noop, noop));
pc.onicecandidate = (ice) => {
if (!ice || !ice.candidate || !ice.candidate.candidate) return;
const ip = ice.candidate.candidate.split(' ')[4];
resolve(ip);
pc.onicecandidate = noop;
};
});
}
getLocalIP().then(ip => console.log('Local IP:', ip));
通过第三方API获取公网IP
async function getPublicIP() {
try {
const response = await fetch('https://api.ipify.org?format=json');
const data = await response.json();
return data.ip;
} catch (error) {
console.error('Error fetching IP:', error);
return null;
}
}
getPublicIP().then(ip => console.log('Public IP:', ip));
服务器端获取IP(Node.js示例)
在Node.js后端环境中,可以通过以下方式获取客户端IP:

const express = require('express');
const app = express();
app.get('/get-ip', (req, res) => {
const clientIP = req.headers['x-forwarded-for'] || req.socket.remoteAddress;
res.json({ ip: clientIP });
});
app.listen(3000, () => console.log('Server running on port 3000'));
注意事项
- 前端获取的IP可能不准确(受VPN/代理影响)
- WebRTC方法可能被浏览器隐私设置阻止
- 第三方API可能有速率限制
- 真实生产环境应结合后端服务验证IP
常用IP API服务
- ipify.org(免费)
- ip-api.com(免费/付费)
- ipinfo.io(付费)
- BigDataCloud(免费套餐)






