JavaScript: Как получить IP-адрес пользователя? - PullRequest
1 голос
/ 26 июня 2009

Возможно ли использовать только JavaScript для получения IP-адреса пользователя? Если да, то как?

Ответы [ 4 ]

1 голос
/ 26 июня 2009

Я так не думаю. Вам нужно будет использовать язык на стороне сервера. Или найдите сервис, который вы могли бы использовать с AJAX, но я не уверен, существует ли он.

0 голосов
/ 17 августа 2016

Я на самом деле играл с этим сам. Вы можете получить локальный IP-адрес пользователя, если он использует определенные браузеры, использующие JavaScript с WebRTC. WebRTC в настоящее время поддерживается Chrome, Firefox и Opera, поэтому он работает не во всех браузерах, а только для начала. mido предлагает отличное решение в предыдущем вопросе под названием Как получить IP-адрес клиента, используя только javascript? .

Это код, который я сейчас пытаюсь изменить, поэтому я могу сохранять IP-адреса в переменных, а не просто отображать их. Я еще не разобрался с этой частью, но она должна вам помочь. Просто скопируйте и вставьте в текстовый файл и откройте в браузере.

<html>
<body>

 <p id=saveIP> Replace this with IP </p>

<script>

function findIP(onNewIP) { //  onNewIp - your listener function for new IPs
  var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
  var pc = new myPeerConnection({iceServers: []}),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;
    //window.saveIP = pc;
    //window.saveIP = localIPs; // Returns [object, object] or JSON.stringfy returns {}

  function ipIterate(ip) {
    if (!localIPs[ip]) onNewIP(ip);
    localIPs[ip] = true;  
  }
  pc.createDataChannel(""); //create a bogus data channel
  pc.createOffer(function(sdp) {
    sdp.sdp.split('\n').forEach(function(line) {
      if (line.indexOf('candidate') < 0) return;
      line.match(ipRegex).forEach(ipIterate);
});
    pc.setLocalDescription(sdp, noop, noop);
  }, noop); // create offer and set local description
  pc.onicecandidate = function(ice) { //listen for candidate events
    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
  };
}


var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);

function addIP(ip) {
  console.log('got ip: ', ip);
  var li = document.createElement('li');
  li.textContent = ip;
  window.saveIP = ip;  // <--value captured is [object HTMLParagraph]; JSON.stringify returns {}
  ul.appendChild(li);
}

findIP(addIP);
document.getElementById('saveIP').innerHTML = JSON.stringify(window.saveIP);
</script>
</body>
</html>
0 голосов
/ 26 июня 2009

Как насчет использования одного из тех онлайн-сервисов, которые сообщают вам IP-адрес запрашивающего. Я видел их только в контексте просмотра HTML. Но моя идея заключается в том, что вы делаете какой-то запрос, и ответ будет содержать информацию ip (в некотором смысле).

0 голосов
/ 26 июня 2009

Нет. Он строго на стороне клиента, поэтому для нахождения IP-адреса будет использоваться дополнительная технология.

Поиск в Google предоставляет множество возможностей.

...