【試してわかる】IPアドレスからの住所特定は本当に可能なのか?

2020年9月6日

この話題は結構いろんな人が気になる内容ではないでしょうか?

とくにSNSを使ったりゲームのオンラインプレイをしている人は、一度はこの言葉を聞いたことがあるでしょう。

そしてよくオンラインゲームのユーザーの中には「IP抜き取ってやったぜwwwざまぁwwww」というような投稿をする人がいます。

ネットを検索すると、「都道府県なら調べられる」とか「プロバイダというところに開示請求したらわかる」などという情報が出てきますが、ネット初心者の方は「まずまずIPアドレスって何?」「プロバイダって何?」「結局わかるの?わからないの?」という人が多いのではないでしょうか?

なので今回は、まずはIPアドレスとは何か簡単に説明して、実際に特定できるか試してみましょう(流石に見知らぬ人の情報を特定するとまずい気がするので、有名な企業の簡単な情報を取得してみます)

詳しい人のためにも、少し上級者向けの説明も入れます。

なお今回は、フリーwifiやモバイルデータ通信(3G、4G、5Gなどと言われるもの)での話は除きます。
自宅に通っているネットワーク(しばしばwifiと呼ばれるもの[厳密的には違う])を使った通信での話です(家にルータという四角い機械があれば、ほぼ自宅ネットワークがあります)

できるのかできないのか早く知りたい

結論を言うと、IPアドレスだけから住所を特定することはできません。

でも、これは例外があって、犯罪が絡む場合(不正侵入、誹謗中傷)は発信者情報開示請求ということをすることで、相手の住所や名前が確実にわかります(これについては法律にかかわるため、この記事では解説しません)

ですが、それ以外の場合(犯罪が絡まない場合など)は勝手に情報を知ることができません。

ということは、裁判沙汰になるような事件が起こらない限り、普通にネットを利用している分には特定することは不可能です。

IPアドレスとは?

初心者向けに、IPアドレスについて本当に簡単に話します。
簡単に言うと、ネットを利用している人のネット上の位置を表す数字の並びです。

これはしばしば住所などと表現されることがあります(筆者もそう説明することが多いです)
ですが、この住所というのはネット上の住所で、リアルの住所ではありません。

このIPアドレスは、相手と通信するときにデータの宛先、データを返す場所を指定するために使います。
なので、ネットを使うときには絶対に相手にIPアドレスを知られます
もしIPアドレスを渡さなかったら、データをもらったり返すことができません。

相手のIPアドレスを知る方法

先ほど「ネットを使うときには絶対に相手にIPアドレスを知られます」と言いましたが、これには例外があります。

それは、「クライアント-サーバー方式」での通信で、クライアント同士が通信をする場合です。

まず「サーバー」というのは、データを提供する人です。
例えばマインクラフト(Java版)の場合、管理者の人のパソコンにワールドデータが保存されています。
プレイヤーが管理者の人のPCに、ワールドデータの依頼をすると(意識しなくても自動でやってくれています)、プレイヤーのPCにワールドデータが送られてきます(依頼するときに送られたクライアントのIPアドレスをもとに返却先を決めます)
このようにサーバーはデータを送る役割をしています。

反対に「クライアント」は、「プレイヤー」に当たる人のことです。
つまり私たちのことです。
私たち「クライアント」が「サーバー」にワールドデータを依頼して、受け取ります。

図に表すとこんな感じです。

このような通信方法を「クライアント-サーバー方式」と言います。
通常は、もっとサーバーに接続しているクライアントは多いです。

なんか変な人がいますねぇ

このような通信方法は、通常のオンラインゲームなどで多く使われています(マインクラフトも)

この場合、他の人と通信する場合は必ずサーバーを通すことになり、クライアント同士が直接通信することはありません!(上級者向け : P2Pの場合はピア同士が通信を行う)

なので、通信をするときのデータの返却先(つまりクライアント[自分]のIP)を他のクライアントが知ることはありません!

ですが、サーバーとクライアントだけを見た場合、クライアントの依頼の中に返却先のアドレス(自分のアドレス)が入っているので、サーバーの管理者だけはクライアントのIPアドレスを知ることができます。

SNSとかでは、TwitterならTwitterの運営元しかIPアドレスを知ることができません。

よくある勘違い

よくゲームなどで、マルチプレイの「ホストになる」というような項目がありますが、それらを選択しても自分がサーバーになることはほとんどありません。
(ゲームをやらない人はこの章を飛ばしてOKです)

マインクラフトの統合版標準マルチプレイ機能を例に挙げてみます。
マイクラ統合版マルチプレイでも、クライアント-サーバー方式で通信しています。

ワールドを開いて招待すると、他のプレイヤーが入ってきます。
この場合自分がホストになりますが、サーバーになるわけではありません。

なぜかというと、マインクラフト開発元(microsoftかmojang)のサーバーを通してデータを転送しているからです。
図で表すとこんな感じです。

なのでワールドを開いていて他の人が入ってきたとしても、その人のIPアドレスを知ることができません。
Realmsでも同様です。

ただし、これがhiveや誰かが立てたサーバーに入る場合は、接続先(サーバーを立てている人)はIPアドレスを知ることができます(前章で書いたような通信なので)
Java版の場合はXboxでのマルチプレイ機能が無いため、Realms以外全て接続先にIPアドレスを知られてしまいます。

このタブから入るワールドは、開発元のサーバーを通さないため、相手にIPを知られます

IPアドレスから住所を特定する技術

さて、本題です。
果たしてIPアドレスから住所を特定することはできるのでしょうか!?もう答えいっちゃったけどね

IPアドレスから位置情報を取得する技術をIP GeoLocationと言います。

FQDNから都道府県を予測する

IPアドレスの形式は、IPv4(今ほとんどの人が利用しているネットワークのバージョン)なら0.0.0.0~255.255.255.255、IPv6(IPv4の問題を解決するための新しいバージョン、移行が進み始めている)なら0:0:0:0:0:0:0:0~ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffまでの範囲になっています。
通信をする際は、接続先を123.123.123.123というように指定して接続します。

ですが、この数字は人間にとって覚えにくい数字なので、数字の代わりに文字を使って接続先を判断する仕組みがあります。
例えば、「google.co.jp」は「172.217.25.195」というように関連付けると、いちいち「172.217.25.195」というわかりにくい数字を指定しなくても、「google.co.jp」と接続先に指定するだけでGoogleに接続できるようになります。
このgoogle.co.jpにあたるものは、FQDNと言います。

このような仕組みをDNS(Domain Name System)と言います。
この仕組みについて詳しく話すとキリがないし、要点から外れるので詳しくは話しません。

実は私たちのIPアドレスはプロバイダ(ネットワークを提供してる人 eo光など)との契約時に自動的にFQDNと紐づけられています。

実際にそれを見てみましょう。

https://www.cman.jp/network/support/nslookup.htmlにアクセスします。
②「自動設定」の「現在のIPアドレス」を選択します
③「オプション」で「PTR」を選択します
④「ご注意:制約事項」に同意できる場合は、「nslookup実行」を選択します。

GoogleのIPアドレス(172.217.25.195)の場合、以下のような結果が出ました(人によって結果は異なります)
四角で囲っている部分がGoogleのIPアドレスに関連付けられているFQDNです。

この場合、172.217.25.195は「nrt12s13-in-f195.1e100.net」または「nrt12s13-in-f3.1e100.net.」に関連付けられているということがわかります。

このFQDNからは様々な情報がわかります。
nrt12s13-in-f195.1e100.netというFQDNは次のように分けられます。
nrt12s13-in-f195 ・・・ ホスト名
1e100.net ・・・ ドメイン

1e100.netというドメインをgoogle検索で調べてみます(googleのFQDNについて、googleで調べるという…(笑))

このことから1e100.netはgoogleが所有しているドメインということがわかります。

このようにドメイン名からはプロバイダ情報(誰が管理しているか≒誰と契約しているか)などがわかります。
(ホスト名は様々なパターンがあるため、ホスト名からはあまり情報がわかりません)

場合によっては住んでいる都道府県がわかることがあります。
例えばFQDNが ●●●-●●●-●●●-●●●f1.hyg1.eonet.ne.jpの場合、このような情報がわかります。
「hyg?hyogo(兵庫)か?つまり契約者は兵庫県に住んでいるのか」「eonet.ne.jp?ふむふむ、eo光と契約しているんだな」
ですが、市区町村よりも詳しい番地などは(筆者が知っている中では)FQDNからわかりません
(筆者は市区町村情報が入っているFQDNを見たことがありません。ほとんどの場合、わかっても都道府県ぐらいかな?)

データが届くまでの経路で大体の位置を特定する

インターネットでは、データが家のネットワークから直接相手のネットワークまで届くわけではありません。

ネットワーク上にある様々なルーター(受け取ったデータを適切な場所へ送りつける装置)をたくさん経由しながら相手にデータが届きます。
(四角いやつはルーター、黒い線はルーター同士のつながり、赤い線はデータが届くまでの経路を示しています)

このようにルーターのつながりが複雑で網のようだからインターネットはネット(網)ワークと呼ばれることがあります。

このように直接的ではなく、バケツ(データ)リレーのようにして相手にデータを届けます。

そして、直前のルーターに接続している人が全員ある特定の地域に住んでいた場合、そのルーターはその地域のデータを送受信しているということになります(?)
少しわかりにくいので、図で表してみました

このようにルーター①とつながっている人が全員新宿区(特定の地域)に住んでいた場合、ルーター①は新宿区からのデータを送受信していることがわかりますね。

そのため、相手のIPアドレスから位置情報がわからなくても、そのIPアドレスにデータを届ける経路を検索し、相手のネットワーク上のルーターの直前のルーターの位置情報がわかれば、相手はその位置の周辺に住んでいることがわかります。

実際にまずは経路を検索してみましょう。
https://mgt.jp/t/tracerouteにアクセスします
②「チェック」をクリックします

この経路は、上のサイトからgoogle.co.jpまでの経路です。
(自宅からの経路を知りたい場合、windowsでtracertコマンドを実行して下さい。説明はしません)

相手のIPアドレスまでの経路を調べたい場合は、「google.co.jp」の部分を相手のIPアドレスに置き換えます。

結果はこのようになりました
(番号が大きくなるほどgoogle.co.jpに近くなります)

この場合、108.170.236.25がgoogle.co.jpまでの直前のルーターということがわかります。
このように経路を検索することができます。

では、traceroute(経路検索)の結果が次のようになっていたとします。
※自分は八王子市に住んでいるとします。

1 10.10.10.10 (自宅のルーターのアドレス )
2 20.20.20.20 (八王子市からのデータをやり取りしているルーター)
3 30.30.30.30 (東京都のデータをやり取りしているルーター)
4 40.40.40.40 (場所不明のルーター①[ある地域からのデータをやり取りしている])
5 50.50.50.50 (相手の家のルーター[位置不明])

40.40.40.40に接続しているルーターは次のようになっているとします

この場合、ルーター①に接続しているユーザーが全員新宿区に住んでいるので、ルーター①は新宿区のデータを送受信していることがわかりますね。
なので40.40.40.40のルーターは新宿区のデータを送受信していることになります。

ということはそれに接続している50.50.50.50のルーター(相手)は新宿区に住んでいることがわかります。

このようにして在住中の地域を特定する方法もあります。

ですがこの方法にはデメリットがあります
ルーター①に接続している人がどこに住んでいるかの情報を収集する必要があります。
そして、データ数が多ければ多いほど正確になるので、たくさんの情報を収集しないといけません。
(上のように、たった二人だけの情報では正確性に欠けます)
なので、個人でこの方法を行うのはほぼ無理です。

なので、企業や団体がその情報を収集して、IPアドレスから大体の地域を特定する機能を提供していることがあります(他の方法を実施していることもあります)

まとめ

今回のお勉強で次のことがわかりました。

  • IPアドレスはサーバー(管理者)のみ知ることができる
  • クライアントがクライアントのIPアドレスを直接知ることはできない
  • IPアドレスから住所を特定することは不可能
  • ただし、都道府県や市区町村が特定できる可能性がある
  • FQDNから地域情報・プロバイダ(契約)情報がわかる可能性がある
  • 正確な情報を検索できるようにするためには、大量のデータが必要である

最初にも書きましたが、モバイルデータ通信やフリーwifi(公共wifi)を利用した場合はこのようなことが当てはまらないことがあります。

筆者は専門家ではなく、様々な情報を検索してわかったことを書いているだけので、もしかしたら間違ったことを書いている可能性があります。
その場合は指摘してくださるとありがたいです。

質問等もいいですが、自分の知識を上回る質問をされると回答できませんのでご了承ください(汗




<NPサーバー>

マインクラフトサーバーを運営しています!

  1. 統合版、Java版どちらでも参加できます!
  2. 経済、サバイバル、PvP(実装中)など、様々な遊び方があります。
  3. 年齢は問いません!

是非ご参加ください!!
https://novablog.work/minecraft-server/

にほんブログ村

ブログランキング・にほんブログ村へ