JavaScript

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

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アドレスの取得を実現しているようだ。

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