RTCPeerConnection API 是 WebRTC 标准的一部分,它可用于建立点对点的连接。通过使用这个 API,我们可以获取客户端的公网 IP 地址。以下是一个示例代码:
function getClientIP() {
return new Promise((resolve, reject) => {
const pc = new RTCPeerConnection({
iceServers: []
});
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), reject);
pc.onicecandidate = event => {
if (event.candidate) {
const ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
const ip = event.candidate.candidate.match(ip_regex)[1];
pc.onicecandidate = null;
resolve(ip);
}
};
});
}
另一种获取客户端 IP 地址的方法是发送 HTTP 请求到一个提供 IP 地址信息的服务。以下是一个示例代码:
function getClientIP() {
return fetch('https://api.ipify.org?format=json')
.then(response => response.json())
.then(data => data.ip);
}
无论使用哪种方法,都需要注意客户端隐私和安全的问题。在使用这些方法时,请确保获取客户端 IP 地址的目的是合法和必要的。