내 IP 주소

- 위치 확인 중... 방문자의 실제 IP 주소 정보를 보려면 여기를 클릭

터미널 및 시스템 환경 사용법

터미널을 어떻게 쓰는지만 설명: 각 “자주 쓰는 변형”마다 명령어 + 어떤 문제를 해결하는지(프로토콜 스택, 출력 형식, 타임아웃, 재시도, 경로 의미)를 설명한다.

macOS / Linux / Raspberry Pi / BSD

터미널에서 가장 흔한 요구사항은: 출력이 깔끔해야 한다(한 줄로 복사/기록/비교 가능) 그리고 스크립트가 멈추면 안 된다. 그래서 여기의 권장 작성 방식은 기본적으로: 무음 모드(출력 오염 방지) + HTTPS(잘못된 프로토콜 방지) + 필요 시 타임아웃(무한 대기 방지)을 포함한다.

기본 사용법(가장 추천)

curl -4  my.ipin.io
명령 프롬프트
C:\Users\admin>curl -4 my.ipin.io
171.83.40.149
  • -s: 진행 표시/안내를 끄고 출력만 남긴다(스크립트에 노이즈가 섞이는 것을 방지).
  • https://: 전체 스킴을 명시하는 것을 강력 추천. 일부 환경에서 기본 http로 인해 리다이렉트/차단/포트 정책 문제가 생기는 것을 피한다.
  • 루트 경로 /: IPv4만 엄격히 출력한다. IPv4를 얻지 못하면 실패한다(IPv6를 IPv4로 착각하는 것을 방지).

자주 쓰는 변형(실무에서 가장 많이 쓰는 세트)

# A1) IPv6만(IPv6 검증/문제 분석용)

   curl -s https://my.ipin.io/v6

   # A2) 위치 요약(터미널에서 읽기 좋은 텍스트 출력)
   curl -s https://my.ipin.io/info

   # A3) 터미널에서 JSON 강제(UA를 curl이 아닌 것으로 변경)
   curl -s -A "Mozilla/5.0" https://my.ipin.io/info

   # A4) IPv4 강제 / IPv6 강제(시스템이 실제로 어떤 프로토콜 스택으로 연결하는지 분석)
   curl -s -4 https://my.ipin.io
   curl -s -6 https://my.ipin.io/v6

   # A5) 타임아웃 추가(스크립트 필수: 네트워크 흔들림으로 멈추는 것 방지)
   curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io

   # A6) 재시도 추가(약한 네트워크/간헐적 흔들림: 1~2회 권장)
   curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info

변형 설명(진짜 알아야 할 포인트)

  • /v6: 엔드포인트 레벨에서 IPv6만 반환한다. “IPv6가 가능한지 명확히 검증”할 때 사용.
  • /info: 엔드포인트 레벨에서 IP + 위치 필드를 반환한다. 터미널에서는 가독성 중심 출력으로 “출구(egress) 육안 확인”에 적합.
  • -A "Mozilla/5.0": 출력 형식 제어. 기본 curl UA에는 curl이 포함 → 서비스가 텍스트 반환; UA 변경 → 서비스가 JSON 반환.
  • -4/-6: 연결 레벨에서 프로토콜 스택을 강제(클라이언트가 v4/v6로만 연결). “왜 항상 v6로 가는가”를 찾을 때 자주 사용.
  • --connect-timeout: “연결 수립” 단계만 제어. 핸드셰이크/연결이 느리면 여기서 중단된다.
  • --max-time: 요청 전체의 최대 시간. 자동화에서 가장 중요(무한 대기 방지).
  • --retry: 성공률을 올리지만 소량(1~2회)만 권장. 재시도가 많으면 작업이 느려지고 장애가 확대된다.

Android(Termux)

Termux의 흔한 문제: 모바일 네트워크는 흔들림이 더 크고, 경로가 더 복잡하며, 프로토콜 스택 선택이 더 불안정하다. 그래서 기본 권장은: 스택 고정 + 타임아웃 + 필요 시 재시도.

기본 사용법(추천)

curl -s -4 --connect-timeout 5 --max-time 10 https://my.ipin.io

자주 쓰는 변형

# B1) 위치 요약(출구 위치를 빠르게 확인)
    curl -s https://my.ipin.io/info

    # B2) IPv6 검증(IPv6를 명확히 테스트할 때만)
    curl -s -6 https://my.ipin.io/v6

    # B3) 약한 네트워크: 소량 재시도
    curl -s --retry 2 --connect-timeout 5 --max-time 10 https://my.ipin.io

변형 설명

  • -4: IPv4가 목적이면 고정해서, 환경이 IPv6를 우선해 결과가 흔들리는 것을 방지한다.
  • /info: 모바일 네트워크는 출구가 자주 바뀐다. 기대한 위치인지 확인하는 데 가장 직관적이다.
  • 재시도 전략: 모바일에서는 간헐적 타임아웃이 흔하다. 소량 재시도로 성공률이 크게 올라간다.

Windows(CMD / PowerShell)

Windows는 용도를 구분하는 것이 좋다: CMD/배치는 “한 줄 텍스트를 얻는 것”에 가깝고, PowerShell은 “JSON을 받아 바로 필드를 파싱”하는 쪽에 가깝다.

기본 사용법(텍스트 한 줄 IP)

curl.exe -s https://my.ipin.io

자주 쓰는 변형

# C1) 위치 요약(터미널에서 읽기 쉬움)
    curl.exe -s https://my.ipin.io/info

    # C2) PowerShell로 JSON 받기(스크립트에서 필드 파싱에 적합)
    Invoke-RestMethod -Uri "https://my.ipin.io/info"

    # C3) IPv6 검증
    curl.exe -s https://my.ipin.io/v6

    # C4) 연결 문제 분석(DNS, 핸드셰이크, 타임아웃 원인 확인; 출력이 길다)
    curl.exe -v https://my.ipin.io/info

변형 설명

  • Invoke-RestMethod: JSON 용도에 적합하며, 수동 파싱을 줄여준다.
  • -v: 분석용으로만 사용. 디버그 정보가 많이 출력되므로 스크립트에서 기본으로 켜지 않는다.
  • 흔한 원인: 시스템 프록시, 기업 게이트웨이, DNS 변조, hosts 규칙 때문에 “같은 명령인데 다른 동작”이 발생할 수 있다.

iOS(iSH / 경량 터미널)

경량 터미널에는 wget만 있는 경우가 많다. 주의: wget의 기본 UA에는 curl이 포함되지 않는 경우가 많아서, 종종 JSON을 받게 된다. “한 줄 텍스트”가 필요하다면 UA를 명시해 터미널 텍스트 출력을 유도해야 한다.

기본 사용법

wget -qO- https://my.ipin.io

자주 쓰는 변형

# D1) 위치 요약
    wget -qO- https://my.ipin.io/info

    # D2) 순수 텍스트 강제(한 줄 IP)
    wget -qO- -U "curl/8" https://my.ipin.io

    # D3) JSON 강제(안정적인 통합)
    wget -qO- -U "Mozilla/5.0" https://my.ipin.io/info

변형 설명

  • -qO-: 조용히 처리 + stdout으로 출력, 스크립트 처리에 편리하다.
  • -U: 출력 형식 제어의 핵심 스위치(UA에 curl 포함 → 텍스트; UA가 curl 아님 → JSON).

OpenWRT / 임베디드 장치

임베디드 장치의 핵심 목표는: 멈추지 않는 것. 그래서 반드시 타임아웃을 설정해야 한다. “공인 IP 변경 감지”를 할 때도 오판을 피해야 한다: 요청 실패는 IP 변경이 아니다.

기본 사용법(타임아웃 포함)

wget -qO- --timeout=10 https://my.ipin.io

자주 쓰는 변형

# E1) 위치 요약(출구 자가 점검)
    wget -qO- --timeout=10 https://my.ipin.io/info

    # E2) 순수 텍스트 강제(한 줄 IP)
    wget -qO- --timeout=10 -U "curl/8" https://my.ipin.io

변형 설명

  • --timeout: 임베디드에서는 기본으로 붙이는 것을 강력 추천. 주기 작업이 멈추는 것을 방지한다.
  • 출력 모드 안정화: wget은 기본으로 JSON을 받을 수 있다. 스크립트가 한 줄 IP만 원한다면 UA로 텍스트 출력을 유도하는 편이 더 안정적이다.

Docker / CI / 자동화 작업

자동화 환경은 불확실성이 더 크다: DNS 변동, 짧은 타임아웃, 출구 정책 변화가 더 흔하다. 권장 기본값: 타임아웃 + 소량 재시도 + 출력 형식 고정(runner가 달라도 파싱이 깨지지 않게).

기본 사용법(타임아웃 포함)

curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io

자주 쓰는 변형(CI에서 가장 실용적)

# F1) 위치를 안정적으로 가져오기(재시도 포함)
    curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info

    # F2) CI에서 JSON을 안정화: UA를 non-curl로 고정
    curl -s -A "Mozilla/5.0" --connect-timeout 3 --max-time 8 https://my.ipin.io/info

    # F3) 분석: 프로토콜 스택 강제
    curl -s -4 https://my.ipin.io
    curl -s -6 https://my.ipin.io/v6

변형 설명

  • UA 고정: CI에서는 이미지/도구에 따라 UA가 다를 수 있다. 고정해야 출력 형식이 흔들리지 않는다.
  • 소량 재시도: 성공률을 올리되, 실패가 빨리 드러나야 한다(원인 분석에 유리).

자주 묻는 질문(FAQ)

Q1: curl -s https://my.ipin.io 를 쓰면, 왜 가끔 실패하거나 오류가 반환되나요?

루트 경로는 “엄격 IPv4”이다: 현재 경로에서 IPv4를 얻을 수 없으면 명확히 실패한다(IPv6를 주고 성공한 척하지 않는다). 이는 보통: IPv6-only 네트워크, 특정 프록시/게이트웨이 환경, 또는 클라이언트가 IPv6로 강제되었고 경로에 사용 가능한 IPv4가 없을 때 발생한다.

분석 방법: curl -s -4 로 IPv4 연결을 강제하거나, /info 로 현재 출구 IP가 무엇인지 확인한 뒤 다음 단계를 결정한다.

Q2: curl로 /info 를 요청했는데, 왜 JSON이 아니죠?

터미널 도구는 기본적으로 “터미널 출력 모드”로 동작하며, 이 모드에서 /info 는 더 읽기 쉬운 텍스트 박스를 출력한다. JSON이 필요하다면(jq/프로그램 파싱), UA를 curl이 아닌 것으로 바꾸면 된다.

curl -s -A "Mozilla/5.0" https://my.ipin.io/info

Q3: 같은 명령인데 왜 다른 기기에서는 출력 형식이 다르죠?

출력 형식은 요청의 User-Agent 에 달려 있다. 도구(curl / wget / 일부 배포판 기본 도구)에 따라 기본 UA가 다를 수 있으며, 그 결과 텍스트 또는 JSON 반환이 달라질 수 있다.

해결: UA를 고정한다. 텍스트가 필요하면 UA에 curl이 포함되게 하고, JSON이 필요하면 UA에 curl이 포함되지 않게 한다. 자동화/CI에서는 UA 고정이 “안정적인 파싱”의 핵심이다.

Q4: 분명 IPv4만 원했는데, 왜 “IPv6로 나간” 느낌이 들까요?

여기서는 두 가지를 구분해야 한다: 연결할 때 사용하는 프로토콜 스택(클라이언트가 v4/v6 중 무엇으로 연결하는지), 그리고 엔드포인트가 반환하는 IP 타입(경로 / 또는 /v6 로 결정).

분석 권장: -4/-6 로 연결 프로토콜 스택을 강제해, 네트워크 환경이 실제로 어떤 경로를 선호하는지 확인한다. IPv4만 원한다면 루트 경로를 사용하고 필요 시 -4 를 강제한다.

Q5: 스크립트에서는 오판을 줄이고 멈추지 않게 하려면 어떻게 써야 하나요?

추천 조합: 무음(노이즈 방지), 타임아웃(멈춤 방지), 소량 재시도(흔들림 내성), 그리고 실패 시 기존 값을 덮어쓰지 않기(실패를 변화로 오인하지 않기).

curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io

Q6: curl과 wget 중 무엇을 우선 써야 하나요?

curl을 쓸 수 있으면 curl: 옵션이 더 풍부하고 분석도 더 강력하다. 하지만 경량/임베디드 환경에서는 wget만 있는 경우가 흔하다. wget도 전혀 문제 없고 핵심은: 타임아웃 설정, stdout으로 출력, 필요하면 UA를 고정해 출력 형식을 잠그는 것.