우리는 집에 ipinfo가 있다 혹은 latency를 활용해 CLI에서 IP를 지리 위치 추적하는 방법
Source: Hacker News
번역을 진행하려면 번역하고자 하는 본문 텍스트를 제공해 주세요. 현재는 링크만 포함되어 있어 번역할 내용이 없습니다. 텍스트를 알려주시면 한국어로 번역해 드리겠습니다.
TL;DR
IP 주소를 국가, 미국 주, 심지어 도시까지 확인할 수 있는 CLI 도구를 만들었습니다.
GitHub – geolocation‑tool
잘 작동하며 ipinfo의 결과를 확인해 줍니다.
배경
최근에 나는 ipinfo finally proved 가 대부분 기술자들이 추정해 온 것을 입증한 글을 읽었다: VPN 제공업체들은 실제로 수백 개 국가에 걸쳐 엄청난 인프라를 유지하고 있지 않다. 그들은 ARIN, RIPE 및 Geo‑DB 제공업체에 의도적으로 잘못된 위치 데이터를 제공함으로써 IP 지리 위치를 위조한다.
그들의 결과는 다른 Geo‑IP 제공업체와 비교했을 때 새로운 접근 방식에서 나온 것이다. 블로그와 Hacker News 댓글을 기반으로, 그들은 대규모 프로브 네트워크를 구축하고 이를 사용해 인터넷상의 모든(또는 대부분) IP 주소를 추적하고 핑했다.
이 지연 시간 및 홉 데이터—고급 알고리즘과 교차 검증과 결합되어—공개 소스에 존재하는 위조된 데이터에 의존하지 않고 IP 주소의 물리적 지리 위치를 정확히 감지할 수 있는 신뢰할 만한 방법을 제공한다.
이 접근 방식은 전적으로 타당하며, 그들의 고객들이 이를 높이 평가하고 크게 의존하고 있을 것이라고 확신한다.
My Experiment
수백 개의 위치에서 모든 IP 주소를 핑할 수는 아직 없지만, Globalping을 사용하면 제한된 일부에 대해서는 할 수 있습니다. 그래서 ipinfo의 결과를 재현하고 누구나 사용할 수 있는 작은 도구를 만들기로 했습니다.
Globalping은 오픈‑소스이며 커뮤니티가 주도하는 프로젝트로, 사용자가 컨테이너 기반 프로브를 자체 호스팅할 수 있게 합니다. 이러한 프로브는 우리의 공개 네트워크에 포함되어, 누구든지 ping이나 traceroute 같은 네트워크 테스트 도구를 실행할 수 있습니다.

현재 네트워크에는 3 000개가 넘는 프로브가 있으며, 이론적으로 거의 모든 IP 주소를 국가 수준은 물론 미국 주 수준까지도 지리적으로 파악하기에 충분합니다.
이 과정을 자동화하고 단순화하기 위해 globalping‑ts 라이브러리를 사용해 작은 CLI 도구를 작성했습니다. 원래 아이디어는 간단했습니다:
- 단일 IP를 입력으로 받는다.
- 대륙별로 몇 번씩 핑을 보내어 대상 대륙을 선택한다.
- 해당 대륙에 있는 여러 프로브에서 IP를 핑한다.
- 결과를 그룹화하고 정렬한다; 가장 낮은 지연 시간을 보이는 국가가 정답일 가능성이 높다.
- (보너스) 최종 국가가 미국인 경우, 같은 과정을 미국 주별로도 반복한다.
제가 해야 할 일은 몇 개의 측정을 만들고 Globalping의 magic field를 사용해 원하는 위치를 전달하는 것이었습니다. 이 필드는 자동으로 해당 위치와 제한에 맞는 몇 개의 의사‑무작위 프로브를 선택해 줍니다.
구현 세부 사항
- 초기 시도 – ICMP ping (2 패킷) – 너무 빠르지만 대부분의 네트워크가 ICMP를 차단합니다.
- TCP‑기반 ping으로 전환 – 여러 인기 포트를 시도해야 했으며 복잡하고 신뢰성이 떨어졌습니다.
- 최종 솔루션 – traceroute – 완벽하게 작동합니다. 대상이 ICMP를 차단하더라도 상위 네트워크는 보통 허용하고, 마지막 홉은 일반적으로 같은 국가에 있습니다.
결과 데이터가 100 % 완벽하지는 않습니다. 보다 견고한 솔루션은 다음과 같습니다:
- 여러 방법 사용 (다른 포트의 TCP, UDP traceroute).
- 하나가 아니라 마지막 몇 홉을 분석.
- ASN 등록 데이터와 공개 WHOIS 정보를 가중 “투표”로 결합.
- 불확실성이 낮은 IP를 표시하여 더 많은 프로브로 재시험.
이는 상업 제공업체의 역할이며, 바로 ipinfo가 수행한 것으로 보입니다.
대륙 감지
대륙당 5개의 프로브를 사용했습니다. 결과는 매우 정확했으며, 대륙 “경계”에 있는 IP만 더 많은 프로브가 필요할 수 있습니다.
예시 – 내 집 IP (중부 유럽):
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는 승리한 대륙에서 단일 측정을 수행하며, 더 높은 프로브 제한을 사용합니다.
- 250 프로브로 시작 – 매우 높은 정확도.
- 기본값을 50 프로브로 낮춤 – 여전히 매우 좋으며, 인증되지 않은 Globalping API 제한(시간당 250 테스트 / IP, 측정당 50 프로브) 내에 머무릅니다.
팁: dash.globalping.io에서 무료 계정을 등록하고 토큰으로 인증하면 시간당 500 테스트까지 사용할 수 있습니다.
더 많은 테스트가 필요하면 다음 중 하나를 선택하세요:
- 자체 프로브를 호스팅합니다(수동 크레딧 생성).
- GitHub Sponsors를 통해 기부하면 자동으로 계정에 크레딧이 적립됩니다.
예시 출력 (50‑프로브 실행):
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 15.87 ms
마무리 생각
분산된 프로브 네트워크에서 지연 기반 측정을 활용하는 접근 방식은 지리 위치 파악에 놀라울 정도로 효과적입니다. 제 CLI 도구는 간단한 개념 증명에 불과하지만, (종종 위조된) 공개 Geo‑IP 데이터베이스에 의존하지 않고도 누구나 충분히 좋은 정확도를 달성할 수 있음을 보여줍니다.
소스 코드를 확인하고 직접 실행해 보거나 개선에 기여해 주세요! 🚀
SUMMARY
Location: Poland, EU
Minimum Latency: 7.29 ms
Confidence: Medium
멋지게도 이제 몇 초만에 응답을 제공하는 기본적인 IP‑to‑country 해석기가 생겼으며, 복잡한 수학을 이해하거나 작성할 필요도 없었습니다. 물론 더 똑똑한 사람이 더 적은 프로브와 더 높은 정확도로 IP를 지리적으로 찾는 공식을 사용할 수도 있겠죠.
Phase 3 – Detecting US state
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
═══════════════════════════════════════════════════
도구가 일치합니다—플로리다(Florida)가 정확한 위치입니다. 하지만 이 시스템의 정확도는 어느 정도일까요? 도시까지 표시하도록 확장할 수 있을까요?
Phase 4 – Detecting city
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, Florida, USA 4.36 ms
3. Tampa, Florida, USA 5.85 ms
═══════════════════════════════════════════════════
SUMMARY
═══════════════════════════════════════════════════
Location: Miami, Florida, United States
Minimum Latency: 0.00 ms
Confidence: Very High
═══════════════════════════════════════════════════
현재 결과는 괜찮지만 더 개선될 수 있습니다. 주요 문제는 magic field가 작동하는 방식에 있습니다. 예를 들어 “Europe”(유럽)를 위치로 설정하면 모든 유럽 프로브에 테스트가 퍼지지만, 각 국가가 반드시 포함된다는 보장은 없습니다. 이 때문에 대상 IP와 같은 국가에 있는 프로브가 누락될 수 있어, 도구가 해당 IP를 인접 국가에 있다고 잘못 추정하게 됩니다.
제안된 해결책
- 선택 로직을 변경하여 대륙별로 모든 국가(및 미국의 모든 주)를 수동으로 설정합니다.
- 모든 국가/주 목록을 Globalping API에 전달하여 각 위치에 최소 하나의 프로브가 선택되도록 합니다.
- 정확성을 높이기 위해 위치별 프로브 수를 제어합니다.
북미 예시 (43개 국가/영토):
| 국가 | 권장 프로브 수 |
|---|---|
| United States | ~200 |
| Canada | ~20 |
| Mexico | ~10 |
| … (기타 영토) | 각각 1‑5 |
도구의 목표는 최소 수의 프로브를 사용하여 인증되지 않은 사용자가 쉽게 테스트할 수 있도록 하는 것입니다. 현재 접근 방식은 훌륭하게 작동하고 구현이 간단하며, 프로브 제한을 높여 정확성을 조정할 수 있습니다.
전반적으로, 지연 시간 기반 지리 위치 감지는 충분한 관측 지점이 있을 경우 IP 위치를 확인하는 견고한 방법입니다. 관측 지점이 거의 없거나 없는 지역에서는 어려움을 겪을 수 있습니다.
도구 실행
geolocate $IP
--limit 플래그를 사용하면 단계당 프로브 수를 늘릴 수 있지만, 모든 단계에 적용되며 할당량을 빠르게 소모할 수 있습니다.
전체 문서는 GitHub 저장소에서 확인할 수 있습니다.
기여
개선 사항이 포함된 풀 리퀘스트를 환영합니다!
실험을 위해 무료 크레딧이 필요하시면, 언제든지 이메일을 보내 주세요 .
프로브 호스팅
프로브를 실행하는 것은 컨테이너를 시작하는 것만큼 간단합니다:
docker run -d ghcr.io/jsdelivr/globalping-probe