
2026/01/31 18:30
**コマンドラインでレイテンシを使ってIPアドレスの位置特定方法** 1. **IP検索サービスを利用する** - `curl ipinfo.io/<IP>` を実行すると、JSON形式で場所情報が返ってきます。 2. **往復時間(RTT)を測定する** - `ping -c 4 <IP>` や `mtr` でレイテンシを推定します。 3. **結果を統合する** - JSONの出力を解析し、RTT値と照らし合わせて近隣性を推測します。 この手法により、ターミナルから迅速にIPアドレスがどこにあるか、およびおおよその距離感を把握できます。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改訂サマリー
Geolocate は、Globalping の遅延ベースのプロービングネットワークを活用して IP アドレスを国・米国州・都市名に解決するオープンソースのコマンドラインツールです。
このツールは、世界中の Globalping の公開プローブから ping または traceroute を送信し、往復時間(RTT)が最も短いプローブを推定位置として選択します。
デフォルト制限 は認証されていないユーザーを API クォータ内に保ちつつ、3,000 以上の公開プローブを使用します:
- 大陸検出用に各大陸で 5 つのプローブ、
- 国または米国州検出用にそれぞれ 50 つのプローブ、
- 都市検出用に 36 つのプローブ。
実際の結果例では、ポーランドの IP が 7.29 ms の遅延を返し、米国 VPN IP は 0.45 ms でフロリダ州に解決され、都市レベルのクエリは 0.00 ms でマイアミを特定しました。
Geolocate は Globalping の「magic field」に依存してプローブを自動選択するため、正確なターゲット国または州にあるプローブが欠落し、精度が低下する可能性があります。ユーザーはデフォルトを上書きし、完全な国/州リストとプローブ数(米国で約 200、カナダで約 20)を増やすことでカバレッジを改善することが推奨されています。この目的のためにツールは
--limit フラグを公開しています。
Geolocate はオープンソースであり、
geolocate $IP コマンドで実行できます。無料クレジットは https://dash.globalping.io/ で登録するか、自前のプローブコンテナをホストすることで取得可能です。プルリクエストは歓迎されており、著者はメール(d@globalping.io)で無料クレジットを提供しています。
偽造される恐れのある公開ジオロケーションデータベースに対する軽量・低負荷な代替手段として、Geolocate は遅延ベースのプロービングを使用して正確な IP 位置情報を取得できるよう開発者と運用担当者に提供します。
本文
TL;DR:
Globalping のプローブネットワークを利用して、IP アドレスの国・米国州・都市を判定する CLI ツールを作成しました。
このツールは、公開されている IP‑to‑location データベースではなく、レイテンシーに基づくジオロケーション手法を採用しています。
背景
最近の研究によれば、多くの VPN プロバイダーが ARIN、RIPE、GeoDB などへ不正なデータを送信し、IP の地理情報を偽装していることが判明しました。
そのような公開ソースに頼らず、著者は大規模プローブネットワークを構築し、インターネット上のほぼすべて(または多く)の IP へ対するレイテンシー/ホップ数を測定しました。
高度なアルゴリズムとクロスリファレンスを組み合わせることで、偽情報に依存せずに実際の物理位置を信頼性高く特定できました。
私は同様のアプローチを Globalping を使って小規模に再現したいと思いました。
Globalping はコンテナベースで動作するオープンソースのプローブネットワークで、世界中どこからでも ping・traceroute などが実行できます。
3,000 本以上のプローブを有しているため、多くの IP を国レベル、あるいは米国州レベルまでジオロケートできる可能性があります。
ツール設計
- 入力として単一の IP アドレスを受け取ります。
- フェーズ 1 – 大陸判定
各大陸にある数本のプローブからターゲットへ ping を数回実行し、平均レイテンシーが最も低い大陸を選択します。 - フェーズ 2 – 国(または州)判定
勝ち抜いた大陸(米国の場合は州)から測定を実施し、多数のプローブを選びレイテンシーでソート、最も良い結果を得た国/州を採用します。 - フェーズ 3 – 都市判定
選択した国/州内の都市に対して同様の手順を繰り返します。
Globalping API の magic field は、指定したロケーションと一致する擬似乱数プローブを自動で選択してくれるため、プローブ選択が簡易化されます。
実装詳細
- 初めは ICMP ping(2 パケット)で高速化を図りましたが、多くのネットワークで ICMP が遮断されています。
- TCP‑ベースの ping(よく使われるポート)に切り替えましたが、実装が複雑かつ信頼性が低いことが判明しました。
- 最終的に traceroute を採用しました:ターゲット側で ICMP が遮断されていても、上流のホップは許可している場合が多く、最後に到達したホップのレイテンシーを物理距離の代理値として利用します。
プローブ数制限
| フェーズ | デフォルトプローブ |
|---|---|
| 大陸判定 | 各大陸 5 本(高精度) |
| 国/州判定 | 50 本(デフォルト; で増加可) |
| 都市判定 | 36 本(デフォルト) |
Globalping は認証なしで 1 IP あたり 250 テスト/時、1 測定あたり 50 プローブ を提供します。
無料アカウントに登録すると、これが 500 テスト/時 に拡張されます。
サンプル出力
Phase 1: Detecting continent... North America: 137.18 ms Europe: 32.39 ms Asia: 174.54 ms South America: 215.08 ms Oceania: 244.15 ms Africa: 156.83 ms Phase 2: Detecting country... Measuring from 50 probes... [████████████████████████████████████████] 100.0% 50/50 - Best: PL (7.29 ms) Top 3 Locations: ───────────────────────────────────────────────── 1.. Poland, EU 7.29 ms 2.. Germany, EU 13.42 ms 3.. Lithuania, EU 17.65 ms ═══════════════════════════════════════════════════ SUMMARY ═══════════════════════════════════════════════════ Location: Poland, EU Minimum Latency: 7.29 ms Confidence: Medium
米国州判定
Phase 3: Detecting US state... Measuring from 50 probes... [████████████████████████████████████████] 100.0% 50/50 - Best: FL (0.45 ms) Top 3 Locations: ───────────────────────────────────────────────── 1. Florida, USA 0.45 ms 2. South Carolina, USA 12.23 ms 3. Georgia, USA 15.01 ms ═══════════════════════════════════════════════════ SUMMARY ═══════════════════════════════════════════════════ Location: Florida, United States Minimum Latency: 0.45 ms Confidence: Very High
都市判定
Phase 4: Detecting city... Measuring from 36 probes... [████████████████████████████████████████] 100.0% 36/36 - Best: Miami (0.00 ms) Top 3 Locations: ───────────────────────────────────────────────── 1. Miami, Florida, USA 0.00 ms 2. West Palm Beach, FL 4.36 ms 3. Tampa, FL 5.85 ms ═══════════════════════════════════════════════════ SUMMARY ═══════════════════════════════════════════════════ Location: Miami, Florida, United States Minimum Latency: 0.00 ms Confidence: Very High
制限と今後の展望
- magic field がすべての国/州でプローブを確実にカバーできるわけではなく、ターゲット国自体のプローブが選択されないケースがあります。
- プローブ網が希薄な地域では精度が低下します。
- より堅牢な解決策としては:
- TCP/UDP traceroute(複数ポート)を併用する
- 複数の最後のホップを解析し、レイテンシーを重み付けで統合する
- ASN や公開 WHOIS データを活用して結果に信頼度を加える
- 信頼度が低い IP は再試行時にプローブ数を増やすフラグを立てる
利用方法
geolocate <IP>
オプション:
--limit N を指定すると各フェーズのプローブ数を増加できます(レートリミットに注意)。完全なドキュメントは GitHub で公開しています。プルリクエスト歓迎です!
無料クレジットやプローブのホスティングをご希望の場合は、d@globalping.io までご連絡ください。
コンテナは https://github.com/jsdelivr/globalping-probe から実行できます。