JavaScript обнаружение IP-адреса локальной сети - PullRequest
1 голос
/ 22 июня 2019

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

function ip_local()
{
 var ip = false;
 window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection || false;

 if (window.RTCPeerConnection)
 {
  ip = [];
  var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
  pc.createDataChannel('');
  pc.createOffer(pc.setLocalDescription.bind(pc), noop);

  pc.onicecandidate = function(event)
  {
   if (event && event.candidate && event.candidate.candidate)
   {
    var s = event.candidate.candidate.split('\n');
    ip.push(s[0].split(' ')[4]);
   }
  }
 }

 return ip;
}
ip_local();

То есть из другого поста StackOverflow, код работал нормально полтора года до сегодняшнего дня.

Где мой локальный ip, кажется, обнаружен как 153b3a68-e3fb-4451-9717-d9b3bc2b5c60.local вместо обычного 192.168.0.11.

Edit: Если кому-то все равно, эта проблема НЕ может быть обойдена и должна быть решена с помощью языка на стороне сервера, в моем случае я использовал PHP как временную «оплошность» над этой проблемой.

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

1 Ответ

1 голос
/ 22 июня 2019

Это часть нового стандарта безопасности для предотвращения утечки частных IP-адресов.

См. Также: https://tools.ietf.org/html/draft-ietf-rtcweb-mdns-ice-candidates-02

Краткое описание:

Asподробно описано в [IPHandling], раскрытие частных IP-адресов клиентов по умолчанию максимизирует вероятность успешного создания прямого однорангового соединения между двумя клиентами, но создает значительную поверхность для дактилоскопии пользователя.[IPHandling] признает эту проблему, но также признает, что в настоящее время нет решения этой проблемы;Реализации, которые выбирают использовать Режим 3 для решения проблем конфиденциальности, часто страдают от неудачных или неоптимальных соединений в приложениях WebRTC.Это, в частности, проблема в неуправляемых сетях, обычно в домах или небольших офисах, где петля NAT может не поддерживаться.

В этом документе предлагается общее решение этой проблемы путем регистрации эфемерных имен mDNS для каждого локального частного IP-адреса,и затем предоставление этих имен, а не IP-адресов, веб-приложению, когда оно собирает кандидатов в ICE.Реализации WebRTC разрешают эти имена в IP-адреса и выполняют обработку ICE как обычно, но фактические IP-адреса не предоставляются веб-приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...