LoginSignup
12
9

More than 3 years have passed since last update.

Javascriptで自分のPrivate IPアドレスを取得

Last updated at Posted at 2018-11-08

WebRTCを使ってJavascriptから自分のPriavte IPアドレスを取得する事ができるようだ。


// Vender Prefixありバージョンの場合も考慮
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
// RTCPeerConnectionコネクションを作成。NAT越えは不要なのでiceServersは未指定
var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};      
// データチャンネルを作成
pc.createDataChannel('');
// Offer送信
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice) {
  if (ice && ice.candidate && ice.candidate.candidate) {
            console.log(ice.candidate.candidate);
      // 正規表現を使ってIPアドレスだけ抜き出す。
      var myIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
      console.log(myIP);
      pc.onicecandidate = noop;
  }
};

WebRTCはブラウザ同士でP2Pの通信ができる仕組みなのだけど、お互いにやり取りするときに、自分のIPなどを含む情報(Session Description Protocol[SDP])をやり取りする。

candidate:0 1 udp 2122260223 192.168.xxx.xxx 64980 typ host generation 0 

この情報から自分のIPアドレス情報を抜き出す事でPrivateIPアドレスの取得を実現しているようだ。

下記の記事が参考になった。

現在、Chromeだとipアドレスが取得出来なくなっていた。ice.candidateの出力内容にChromeとFirefoxの場合で違いがあるようだ。localhostとインターネット越しにつなぐ場合も結果が違うようだ。

mDNS を利用したWebRTC のローカル IP 隠蔽機能

によるとChromeや、Safariだと、IPアドレスではなく、UUID.local形式になるようだ。

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9