📜  如何使用 JavaScript 获取客户端 IP 地址?(1)

📅  最后修改于: 2023-12-03 15:38:02.908000             🧑  作者: Mango

使用 JavaScript 获取客户端 IP 地址

在 Web 应用程序中,通常需要获取客户端的 IP 地址,以便识别用户或提供一些基于位置的服务。本文将介绍如何使用 JavaScript 获取客户端的 IP 地址。

使用第三方服务

如果你想获取客户端的公网 IP 地址,可以使用一些第三方服务,比如 https://api.ipify.org 。这里是一个使用 jQuery 获取客户端 IP 地址的示例代码:

$.getJSON("https://api.ipify.org?format=json", function(data) {
    console.log(data.ip);
});

这个代码使用 jQuery 发送一个 GET 请求到 https://api.ipify.org ,该请求会返回一个 JSON 格式的响应:

{"ip":"123.45.67.89"}

可以通过响应中的 ip 字段获取客户端的 IP 地址。

使用 WebRTC

WebRTC 是一个实时通信的技术,它可以在浏览器之间传输视频、音频和数据。WebRTC 也可以用来获取客户端的 IP 地址。我们可以使用 RTCPeerConnection 对象获取本地的 IP 地址。

function getLocalIPs(callback) {
  var ips = [];

  var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
  var pc = new RTCPeerConnection({iceServers:[]});
  pc.createDataChannel('');
  pc.onicecandidate = function(e) {
    if (!e.candidate) {
      pc.close();
      callback(ips);
      return;
    }
    var ip = /^\s*([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\s*$/.exec(e.candidate.candidate)[1];
    if (ips.indexOf(ip) == -1)
      ips.push(ip);
  };
  pc.createOffer(function(sdp) {
    pc.setLocalDescription(sdp);
  }, function onerror() {});
}

getLocalIPs(function(ips) {
  console.log(ips);
});

这段代码使用 RTCPeerConnection 对象创建了一个数据通道,并通过 onicecandidate 事件监听 ICE Candidate (ICE 是 Internet Connectivity Establishment 的缩写,用于实现对等通讯)。当 ICE Candidate 被触发时,会从 candidate 的属性中获取本地的 IP 地址。最终会将所有 IP 地址添加到 ips 这个数组中并传递给回调函数 callback

使用 WebSocket

使用 WebSocket 或 HTTP 请求都能够实现获取客户端的 IP 地址。这里以获取客户端的公网 IP 地址为例子,使用 WebSocket 获取:

var WebSocketServer = require("ws").Server;
var http = require("http");
var server = http.createServer();
server.listen(8080);

var ws = new WebSocketServer({server: server});
ws.on("connection", function(socket) {
    var ip = socket._socket.remoteAddress;
    console.log(ip);
});

这段代码创建了一个 HTTP 服务器和一个 WebSocket 服务器,当有客户端连接到 WebSocket 服务器时,会通过 socket._socket.remoteAddress 获取客户端的 IP 地址。

以上是使用 JavaScript 获取客户端 IP 地址的一些方式,根据实际的需求进行选择。