フィッシング詐欺に限りませんが、考えようによってはインターネットは魔境。
住所・氏名・メールアドレス・電話番号・クレジットカード番号・チャット履歴・グループ内名簿・取引先企業情報・機密文書・プライベートな写真…、何でもかんでも盗まれます。
こんな風に必要以上に怖がる必要は無いのですが、無知であることは時に恐怖を助長し、時にセキュリティの甘さを露呈し付け込む隙を与えるのではないでしょうか。
最近、IPアドレスのことを調べていますが勘違いに次ぐ勘違い。
次から次へと「そうじゃなくて、こうなんですよ」という感じで情報理解が刷新されていきます。
元々、難しい話なのですよね。
本当に理解したいのなら本腰を入れてジックリと学ばないといけない世界。
それなのに、おいしいところだけササッと欲しがろうとするから無理がでる。
Hello、デジタルジャーナリストのコンバット(クリムゾン)越後です。
この記事は、何度も勘違いを修正した中で作っていますので、カオス(混沌)ではあるもののファクト(真実)でもあります。
刮目せよ。
インターネットに何だかんだと接続する時代です。
知っておいた方が良いことがたくさんあるのです。
ユーザー属性の詳細:市区町村
Googleアナリティクスでは、リアルタイムでユーザーの来訪を知ることができます。
その際に、エリア情報が表示されます。

エリア情報はグローバルIPアドレスから取得していると、Googleさんの説明にありました。
この情報の精度ですが、高い場合もあれば低い場合もあります。
プロキシサーバーや固定IPを利用
モバイル回線(Docomo、Rakuten など)を利用
住宅用ネット回線(So-net など)を利用
下に行くほど正確に位置情報が判明します。
スマホのIPは大雑把
過疎っているブログのアクセス情報を見たりします。
普通に考えたら Osaka が30件あるなら、 Kobe や Kyoto は10件前後ありそうです。
人口比ってやつですね。
| 1 | (not set) | 117 |
| 2 大阪 | Osaka | 30 |
| 3 東京 | Minato City | 20 |
| 4 横浜 | Yokohama | 19 |
| 5 東京 | Shinjuku City | 17 |
| 6 札幌 | Sapporo | 14 |
| 7 東京 | Shibuya | 13 |
| 8 名古屋 | Nagoya | 13 |
| 9 福岡 | Fukuoka | 10 |
| 10 東京 | Chiyoda City | 7 |
東京は、いくつかに分割されているようです。
上位は大都市が多いですね。
ちなみに Osaka が30に対して、Kobe が4、Kyoto が3 でした。
| 156 | Otofuke | 1 |
| 157 | Otsu | 1 |
| 158 米ペンシルベニア州 | Philadelphia | 1 |
| 159 | Sabae | 1 |
| 160 | Sagae | 1 |
Otofuke は北海道にある音更町です。
家庭のネット回線から接続すると、市町村レベルでエリアが取得できます。
ですが、同じ場所からスマホ回線で接続すると、おそらく Sapporo と表示されると思います。
これが、Osaka の比率が妙に高い現象の理由です。
関東は複雑ですが(実際、私もモバイル回線で中野区と表示されたことがあります)、スマホでネット接続すると下記のどれかになる確率が高いハズ。
もちろん、下記よりも現在地に近い都市が選択される場合もあるし、UnKnown という識別不能になるケースもあります。
Sapporo
Minato City etc…(Tokyo)
Yokohama
Nagoya
Osaka
Fukuoka
スマホだと、平気で他県になりますのでかなり大雑把ですね。
ChatGPTさんの回答
モバイル回線(キャリア)の性質を理解しておく
例えば:
| キャリア | 傾向 |
|---|---|
| docomo (spmode.ne.jp) | 東京(千代田区)が多く出る |
| au (KDDI) | Osaka や Kyoto が多く出る(実際の端末位置に依存せず) |
| SoftBank | Tokyo が多い |
| 楽天モバイル | Tokyo または Nagoya |
📍理由:モバイルデータ通信は NAT(キャリアゲートウェイ)経由なので、
実際の端末の位置ではなく「出口サーバーの所在地」が返るのです。
つまり「Osakaの割合が多いはず」というのは正しくて、
実際にあなたの回線が au 系(KDDI)なら、Osaka 表示が出るのは妥当です。
🏠 住宅回線(固定回線)と地域精度の関係
✅ 固定回線(フレッツ、NURO、auひかりなど)
- 各回線事業者は 地域ごとに独自のIPアドレス帯域を持っています。
たとえば:- 東京:153.x.x.x
- 大阪:126.x.x.x
- 名古屋:60.x.x.x
(これは例ですが、実際にかなり地域でIP帯が分かれています)
- そのため、GeoIPデータベースが固定回線IPを高精度で判定できます(誤差10〜30km程度)。
👉 結果的に、「〇〇市」や「〇〇区」まで合っていることも多いです。
特に**住宅向けISP(So-net、OCN、Biglobeなど)**は精度が高いです。
🧭 GeoIPの精度ランク(一般的な傾向)
| 種別 | 精度 | 備考 |
|---|---|---|
| 光回線(固定IPまたはPPPoE) | ★★★★★ | 市区町村レベルで正確 |
| 動的IP(家庭用ISP) | ★★★★☆ | 県単位〜市単位で正確 |
| モバイル回線(キャリア) | ★★☆☆☆ | 東京/大阪/福岡などの中継拠点が混在 |
| VPN・プロキシ | ★☆☆☆☆ | 実際の地域とは無関係 |
なぜスマホのIPは不安定なのか?
電波の基地局は、高性能を維持できるのがせいぜい半径1kmと言われてます。
だから、Rakuten Mobile だけでも数万個の基地局が国内にあります。
ここからは推論なので、いい加減な話ですが概ねは間違っていないと思います。
つまり、スマホってやつは移動しながら持ち歩くものであり、移動することによって最適な基地局をドンドン切り替えていく必要がある。
徒歩の移動ですら、最寄りの基地局が適時変わらなければ、電波状況が悪くなるのだから。
だから、接続・再接続を頻繁に繰り返す特性がある。
電波を提供する側は空いているIPアドレスをユーザーに割り当てるが、スマホのこういった特性上、大き目の器で管理しないと破綻してしまうのだろう。
スマホ由来の身バレ
こう考えると、住宅用回線に比べてスマホでのネット接続は秘匿性が高い(=プライベートを担保しやすい)ような気がします。
しかし、まったくの逆。
セキュリティの観念からデバイスIDというものがあるため、フィンガープリント(指紋)を残しやすい特徴があります。
SNSでは端末BANがありますので、「このIDのスマホ(の持ち主)は厄介者だ」という認識を持たれてしまうと、指紋照合によって気づかれてしまいます。
言い方は悪いですが、有害指定です。
実際の指紋と同じですね。
Aの殺害現場に残っていた指紋と、Bの盗難自転車に残っていた指紋が一致。
誰なのかは分からなくとも、AとBに同一人物が絡んでいたことが判明する。
友人などにアカウントを作ってもらっても、有害指定デバイスでログオンすることによって再びBANされる危険性があります。
一方でPCでのログインにおいても、ブラウザの Cookie などが痕跡となりやすいのです。
シークレットモードで指紋を消したら消したらで、「何でアイツ、手袋を絶対に外さないの? 指紋を残したくないのか?」みたいな怪しさがありますよね。
遠隔操作でIP再取得を実現
ここから、ドマニアックな検証実験を行います。
実施する検証のゴール
機内モードをONにして数秒待ちます。
機内モードをOFFにします(モバイル回線の再接続)。
Android スマホに上記の指示を Python で送ります。
Python はプログラム言語の一つであり、パソコンからスマホに指示を出す感じですね。
何がしたいのか?
例えば2分毎に機内モードのON・OFFをさせます。
これによって、IPアドレスが変化します。
スマホからのテザリングで、PCがネット接続していたらどうでしょうか?
そして、5分間隔で下記のワンセットを実行させます。
・アカウントの変更
・メッセージの作成
・メッセージの送信
アカウントの変更時には、そのアカウントに対応したブラウザを呼び出すように管理します。
キャッシュやCookie対策ですね。
このブラウザ管理は後々に行うとして、今回はスマホの遠隔操作です。
これ系の話になると、まあ色々と業者さんがあります。
しかし、今回は極力無料でやってみたいというトライです。


ADBコマンドを直接実行する
今回は下記のこれをやってみましょう。
まずは、Android の platform-tools をダウンロードして、環境変数の設定を行いました。
下記サイトを参照に。


その後の工程については、私の理解が足りないのだろう。
ぜんぜん、うまくいかなかったので ChatGPT さんに尋ねて作りました。
ものすごい数の試行錯誤となったが、失敗しながら少しずつ訂正していけました。
機内モードON→OFFに関してはやめておけって怒られたので、もっとシンプルにネット接続をON→OFFにする仕組みで実装しました。
PC はスマホのモバイル回線からテザリングした電波でネット接続します。
Android スマホに指示を出して、ネットワークの接続→断線→再接続を繰り返します。
PC と Android で回線を共有しているので、PC側でグローバルIPの変化をプリントします。
=== Cycle Start ===
🌐 Global IPv4: 211.7.110.227
🌍 ipwho.is : Japan / Gifu Prefecture / Minokamo / Unknown
🌍 ipapi.co : Unknown / Unknown / Unknown / Unknown
🌍 ipinfo.io : JP / Osaka / Osaka / AS138384 Rakuten Mobile Network, Inc.
✅ Likely region: Gifu Prefecture
Sleeping 45 seconds…
📴 Disabling mobile data…
📶 Enabling mobile data…
⏳ Waiting 10s for reconnection…
=== Cycle Start ===
🌐 Global IPv4: 211.7.111.5
🌍 ipwho.is : Japan / Osaka Prefecture / Osaka / Unknown
🌍 ipapi.co : Unknown / Unknown / Unknown / Unknown
🌍 ipinfo.io : JP / Osaka / Osaka / AS138384 Rakuten Mobile Network, Inc.
✅ Likely region: Osaka Prefecture
Sleeping 45 seconds…
📴 Disabling mobile data…
📶 Enabling mobile data…
⏳ Waiting 10s for reconnection…
=== Cycle Start ===
🌐 Global IPv4: 211.7.116.208
🌍 ipwho.is : Japan / Aichi Prefecture / Toyota / Unknown
🌍 ipapi.co : Unknown / Unknown / Unknown / Unknown
🌍 ipinfo.io : JP / Osaka / Osaka / AS138384 Rakuten Mobile Network, Inc.
✅ Likely region: Aichi Prefecture
Sleeping 45 seconds…
分かったこと
グローバルIPv4 211.7.116.208 みたいなものは、再接続するたびに変化します。
このIPからエリアの特定をしたかったのですが、これが意外と難しいみたいで利用する媒体によって答えが違います。
うちの API を使ったら精度90%です、すごいでしょ(有料)…みたいな世界のようで、的中させるのには限度を感じました。
しかし、日本国内のどこかテキトーな地点が表示されるし、それがランダム性の高い形で繰り返されることが分かったので十分です。
うちは、住宅用回線がNuro光(So-net)なのですが、これでネット接続するとグローバルIPは居住地の近所を示します(だいたいのエリアですが)。
どのくらい近所かというと、歩いて30分程度の距離感です。
モバイル回線とは逆に、かなり正確なのですね。
別人になりすましても…

別にあれですよ、人口規模で2~3万人程度の狭いエリアだとしても、そこに1人しかネット接続する住民がいないなんてあり得ないわけで。
だから当然、別人の可能性の方が高いのですが、手がかりを与えてしまうのは確かでしょう。

これはマズいですね。
同じIPアドレスから短時間の間に投稿されたのなら、垢Aと垢Bが同一人物だと推定されるかもしれません。
ただし、家族で同じ回線を共有するなんてことはありますからね、同一人物である可能性が高いけれども絶対とも言い切れない(疑われるのは間違いない)。

スマホのモバイル回線ならグローバルIPなんて、コロコロ変わるし~エリアもデタラメだし~…とは言っても端末自体に固有のデバイスIDがあるので、これは運営側にバレます。

ブラウザのCookie(クッキー)も侮れません。
例えば、Chrome で垢Aのログイン、投稿、垢Aのログオフ、垢Bのログイン、投稿…
こんな風にログインの入り切りをします。
垢Aのクッキーと垢Bのクッキーが同じであれば、怪しまれるでしょう。
かといって、ログオフするたびにクッキーの情報を削除して0にしていたら、毎回真っ白な状態からログインすることになります。
これもおかしいですよね、普通に使っていたら垢Aでログインしっぱなしだし、クッキーの情報は蓄積されていくはずですから。
垢Aは Chrome から、垢Bは Edge から、垢Cは Firefox から…みたいに使い分けないといけませんが、まあまあ不便だろうしさ、間違えないように常に気をつけないといけない(しんどい)。
最後までお読みいただきありがとうございます。
次回は、ブラウザのクッキーを管理する Pythonスクリプトを作っていきたいと思います。
Aを選択すれば、アカウントAでログインした状態のブラウザAを呼び出し、Bを選択すればアカウントBでログインした状態のブラウザBを呼び出す。
そういうイメージのものです。





コメント