概要
ネットを渡り歩いていると、ときどき有害そうなサイトにあたることがある。「会員登録が完了しました。お金を払ってください。」という警告じみたサイトだ。そんなサイトには「あなたのIPアドレスは〇〇で、PCの機種は〇〇ですね?」みたいな文言がついていることが多い。初めて見ると少しびっくりする。
今回はそれを再現したい。とはいっても詐欺に手を染めるわけじゃない。端末の情報を取得するという技術的な部分だけ。
先にお断りしておくと、本記事で紹介・実装した機能はあくまでも利用者の端末上で動作し、利用者に対して情報を表示させているだけだ。
ブラウザ情報を抜き取る
まずは、以下のような情報を抜き出してみる。ボタンを押してみてほしい。
ブラウザ情報:
言語設定:
上のような情報は特に工夫をしなくとも簡単に表示できる。JavaScriptにあるwindowという最上位のオブジェクトから、それぞれ以下のプロパティを抜き出しているだけ。
// ブラウザなどの情報 window.navigator.userAgent; // 言語設定 window.navigator.language;
IPアドレスを抜き取る
IPアドレスを表示すると、「あなたを特定しましたよ」感が出る。しかし、JavaScriptのプログラムだけではIPアドレスは取得できない。なぜなら、JavaScriptはユーザがHTTPで取得したHTML内に埋め込まれているからだ。ネットワーク層で用いられるIPアドレスの情報には触れようがない。
とはいえ、少し工夫すると可能だ。
あなたのIPアドレス:
以下のサイトで公開されているAPIとjQueryを使って下のような感じで実装した。
$.get("https://ipinfo.io", function(res) { document.getElementById("ip_address").innerHTML = "あなたのIPアドレス:" + res.ip; }, "jsonp");
確かに、JavaScriptはHTMLに埋め込まれているため通信過程には関与できない。しかし、埋め込んだスクリプトを使ってネット上のAPIにアクセスさせれば、別途IPアドレスを取得させることができる。
なお、家のルータやプロキシなどを経由して(NAPTを使って)通信している場合には、使用している端末にかかわらず、それら中継機器のグローバルIPアドレスが表示されるはずだ。だから基本的には、同じルータに繋がっているPCとスマホでは同じIPアドレスが表示される。
まとめ
これらは、端末から引き出せる情報のごく一部だ。調べていくと、他にもバッテリーの充電状態や、直前に訪問したサイトなんかも表示することができるみたいだ。このように、偽サイトに自分の端末の情報が表示されたとしても、大抵は本記事のように無害なので安心してほしい。