Как определить ip пользователя с помощью js, но без использования apiшек

Пробовал вычислить ip по гайдам, но там используют апишки. Также изучал код сайтов с апишками, но безуспешно. Мне нужен код на js, чтобы он выдавал ip пользователя сайта, пусть даже прокси или впнный, не так важно. Может кто-то знает, что находится внутри черного ящика.


Ответы (1 шт):

Автор решения: alrossa

Попробуйте прочитать эту статью, может она поможет Вам в решении поставленного вопроса: Определение локального IP-адреса(локальной сети) пользователя используя HTML5 и JavaScript.

Определение IP адреса осуществляется браузером, а не сервером! Определение происходит за счёт использования HTML5 RTCPeerConnection вызываемого через JavaScript. Привожу код из данной статьи

// код определения локального IP-адреса пользователя из статьи с https://blog.ivru.net/?id=157
const getUserIP = (onNewIP) => {
  const myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

  const pc = new myPeerConnection({
    iceServers: []
  });

  const noop = () => {};
  const localIPs = {};
  const ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g;

  const iterateIP = (ip) => {
    if (!localIPs[ip]) onNewIP(ip);
    localIPs[ip] = true;
  };
  let key;

  pc.createDataChannel('');
  pc.createOffer().then(sdp => {
    sdp.sdp.split('\n').forEach(line => {
      if (line.indexOf('candidate') < 0) return;
      line.match(ipRegex).forEach(iterateIP);
    });

    pc.setLocalDescription(sdp, noop, noop);
  }).catch(reason => {
    // Обработка ошибок
  });

  pc.onicecandidate = ice => {
    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
    ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
  };
};

try {
  localIp; // Проверяем есть ли в HTML элемент с id localIp
  try { //Если в HTML есть элемент с id localIp
    getUserIP(ip => { // Пробуем определить локальнйы IP
      if (ip.length > 0) { // Если длина полученного IP больше 1
        localIp.innerHTML = `Ваш локальный IP: ${ip}`;
      } else {
        localIp.innerHTML = 'Ваш локальный IP не был определен.';
      }
    });
  } catch (err) {
    localIp.innerHTML = 'Ваш локальный IP не удалось определить в Вашем браузере.';
  }
} catch (err) {
  // Если на странице нет элемента в Id localIp - ничего не делаем
}
<span id="localIp">Здесь будет информация о Вашем локальном IP-адресе, а эта строчка будет заменена.</span>

→ Ссылка