latency를 사용해 IP를 지리 위치 파악
Source: Dev.to
TL;DR
IP 주소를 국가, 미국 주, 심지어 도시까지 확인할 수 있는 CLI 도구를 만들었습니다.
GitHub – geolocation-tool
Background
Ipinfo가 최근 보여준 바와 같이 많은 VPN 제공업체가 ARIN, RIPE, Geo‑DB 제공자에게 잘못된 정보를 제공해 IP‑지리 위치 데이터를 조작합니다. 이들의 정확도는 인터넷상의 대부분 IP 주소에 대해 핑과 트레이스 라우트를 수행하고, 지연 시간 및 홉 데이터를(고급 알고리즘과 함께) 활용해 실제 물리적 위치를 추정하는 대규모 프로브 네트워크 덕분입니다.
저는 Globalping이라는 오픈‑소스, 커뮤니티 기반 프로젝트를 이용해 작은 규모로 비슷한 접근 방식을 재현할 수 있는지 확인하고 싶었습니다. Globalping은 사용자가 컨테이너 기반 프로브를 자체 호스팅할 수 있게 해줍니다. 현재 공개 네트워크에는 > 3000개의 프로브가 있어 대부분의 IP를 국가 수준 또는 미국 주 수준까지 지리 위치를 파악하기에 충분합니다.
How Globalping Works
Globalping은 프로브 중 하나에서 네트워크 테스트(핑, 트레이스 라우트 등)를 실행할 수 있는 공개 API를 제공합니다. location 필드를 지정하면 API가 원하는 지역에 대략 일치하는 프로브 집합을 선택합니다.

Tool Design
CLI는 세 단계로 구성됩니다:
- 대륙 탐지 – 대륙당 몇 개의 프로브에 핑을 보내 가장 빠른 것을 선택합니다.
- 국가 탐지 – 승리한 대륙의 프로브들에서 다수의 측정을 수행하고 가장 낮은 지연 시간을 보인 국가를 선택합니다.
- 미국 주 탐지 – 대상 국가가 미국인 경우, 미국 내 프로브에 한정해 동일 과정을 반복합니다.
Implementation Details
- 라이브러리 –
globalping-ts(Globalping API용 TypeScript 래퍼). - 측정 – 처음에는 ICMP 핑(패킷 2개)을 사용했지만 많은 네트워크가 ICMP를 차단합니다. TCP‑기반 핑으로 전환했고, 최종적으로는 마지막 홉의 지연 시간이 대상과 동일 국가에 있는 경우가 많아
traceroute를 사용하게 되었습니다. - 프로브 선택 – Globalping의
magic필드를 사용해 서비스가 요청된 위치와 제한에 맞는 의사‑무작위 프로브를 선택하도록 합니다. - 제한 –
- 대륙 단계: 대륙당 5개 프로브(빠르고 정확).
- 국가 단계: 기본 50개 프로브(무료 티어 한도인 250 테스트 / 시간 내에 맞춤).
- 미국 주 단계: 역시 50개 프로브.
Running the Tool
# 예시: 자신의 홈 IP를 확인
geolocate 203.0.113.42
Phase 1 – Continent detection
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
도구는 Europe를 승리 대륙으로 선택합니다.
Phase 2 – Country detection (50 probes)
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 – US‑state detection (example IP)
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
Observations
- 정확도 – 대륙당 5개 프로브와 최종 국가/주 단계에 50개 프로브만 사용해도 도구는 ipinfo가 공개한 위치와 신뢰성 있게 일치합니다.
- 속도 – 전체 과정이 몇 초 안에 끝나며, 무료 티어 API 제한(250 테스트 / 시간, 측정당 50 프로브) 내에 충분히 들어갑니다.
- 제한 사항 –
- ICMP/UDP 트레이스 라우트에 의존하기 때문에 해당 패킷을 차단하는 네트워크에서는 결과가 영향을 받을 수 있습니다.
- 마지막 홉만 검사하므로, 여러 홉을 사용하거나 TCP/UDP 트레이스 라우트, ASN 데이터를 활용하면 신뢰도를 높일 수 있습니다.
- 대륙 경계에 있는 IP(예: 대륙 사이)에서는 결정적인 결과를 얻기 위해 더 많은 프로브가 필요할 수 있습니다.
Future Improvements
- AS‑level WHOIS 정보와 가중 투표 시스템을 결합.
- ICMP 차단 네트워크를 대비해 다양한 포트의 TCP/UDP 트레이스 라우트 지원 추가.
- 단일 홉이 아니라 마지막 몇 홉을 분석하도록 확장.
- “불확실성 높음” 플래그를 도입해 프로브 수를 늘린 두 번째 라운드를 자동으로 트리거.
Getting Started
- 무료 Globalping 계정 만들기 – https://dash.globalping.io/
- API 토큰 생성(선택) – 시간당 최대 500 테스트를 사용할 수 있습니다.
- 저장소를 클론하고 의존성을 설치합니다:
git clone https://github.com/jimaek/geolocation-tool.git
cd geolocation-tool
npm install
- CLI를 실행합니다(토큰이 있으면
YOUR_TOKEN을 교체):
export GLOBALPING_TOKEN=YOUR_TOKEN # optional
node dist/index.js 203.0.113.42
무료 할당량보다 더 많은 테스트가 필요하면 자신만의 프로브를 호스팅(수동 크레딧 발생)하거나 GitHub Sponsors를 통해 프로젝트를 지원할 수 있습니다.
이 도구는 전 세계에 고르게 분포된 소수의 노드만으로도 지연 시간 기반 프로빙을 통해 잠재적으로 조작된 공개 데이터베이스에 의존하지 않고도 놀라울 정도로 정확한 IP 지리 위치 파악이 가능함을 보여줍니다.