Lahの部屋

落書き帳です。見たい人は見てください。

jsで端末情報を抜き取ってみる

概要

 ネットを渡り歩いていると、ときどき有害そうなサイトにあたることがある。「会員登録が完了しました。お金を払ってください。」という警告じみたサイトだ。そんなサイトには「あなたのIPアドレスは〇〇で、PCの機種は〇〇ですね?」みたいな文言がついていることが多い。初めて見ると少しびっくりする。

 今回はそれを再現したい。とはいっても詐欺に手を染めるわけじゃない。端末の情報を取得するという技術的な部分だけ。

 先にお断りしておくと、本記事で紹介・実装した機能はあくまでも利用者の端末上で動作し、利用者に対して情報を表示させているだけだ。


ブラウザ情報を抜き取る

 まずは、以下のような情報を抜き出してみる。ボタンを押してみてほしい。

 

ブラウザ情報:

言語設定:

 上のような情報は特に工夫をしなくとも簡単に表示できる。JavaScriptにあるwindowという最上位のオブジェクトから、それぞれ以下のプロパティを抜き出しているだけ。

// ブラウザなどの情報
window.navigator.userAgent;

// 言語設定
window.navigator.language;


IPアドレスを抜き取る

 IPアドレスを表示すると、「あなたを特定しましたよ」感が出る。しかし、JavaScriptのプログラムだけではIPアドレスは取得できない。なぜなら、JavaScriptはユーザがHTTPで取得したHTML内に埋め込まれているからだ。ネットワーク層で用いられるIPアドレスの情報には触れようがない。

 とはいえ、少し工夫すると可能だ。

 

あなたのIPアドレス

 以下のサイトで公開されているAPIjQueryを使って下のような感じで実装した。

ipinfo.io

$.get("https://ipinfo.io", function(res) {
document.getElementById("ip_address").innerHTML = "あなたのIPアドレス:" + res.ip;
}, "jsonp");

 確かに、JavaScriptはHTMLに埋め込まれているため通信過程には関与できない。しかし、埋め込んだスクリプトを使ってネット上のAPIにアクセスさせれば、別途IPアドレスを取得させることができる。

 なお、家のルータやプロキシなどを経由して(NAPTを使って)通信している場合には、使用している端末にかかわらず、それら中継機器のグローバルIPアドレスが表示されるはずだ。だから基本的には、同じルータに繋がっているPCとスマホでは同じIPアドレスが表示される。


まとめ

 これらは、端末から引き出せる情報のごく一部だ。調べていくと、他にもバッテリーの充電状態や、直前に訪問したサイトなんかも表示することができるみたいだ。このように、偽サイトに自分の端末の情報が表示されたとしても、大抵は本記事のように無害なので安心してほしい。