우리는 집에 ipinfo가 있다 혹은 latency를 활용해 CLI에서 IP를 지리 위치 추적하는 방법

발행: (2026년 1월 31일 오후 06:30 GMT+9)
13 min read

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 같은 네트워크 테스트 도구를 실행할 수 있습니다.

Globalping network map

현재 네트워크에는 3 000개가 넘는 프로브가 있으며, 이론적으로 거의 모든 IP 주소를 국가 수준은 물론 미국 주 수준까지도 지리적으로 파악하기에 충분합니다.

이 과정을 자동화하고 단순화하기 위해 globalping‑ts 라이브러리를 사용해 작은 CLI 도구를 작성했습니다. 원래 아이디어는 간단했습니다:

  1. 단일 IP를 입력으로 받는다.
  2. 대륙별로 몇 번씩 핑을 보내어 대상 대륙을 선택한다.
  3. 해당 대륙에 있는 여러 프로브에서 IP를 핑한다.
  4. 결과를 그룹화하고 정렬한다; 가장 낮은 지연 시간을 보이는 국가가 정답일 가능성이 높다.
  5. (보너스) 최종 국가가 미국인 경우, 같은 과정을 미국 주별로도 반복한다.

제가 해야 할 일은 몇 개의 측정을 만들고 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

GitHub – globalping‑probe

Back to Blog

관련 글

더 보기 »