TL;DR - 2015년 가장 빠른 방법

TL;DR - 2015년 가장 빠른 방법

쉘 스크립트에서 외부 IP 주소를 찾아야 합니다. 현재 나는 이 기능을 사용합니다:

myip () {
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}

perl-libwww하지만 , perl-html-format, perl-html-tree설치 여부 에 따라 다릅니다 .

외부 IP를 어떻게 얻을 수 있나요?

ベストアンサー1

DNS 서버에서 직접 가져오는 것이 좋습니다.

아래의 다른 답변 대부분은 HTTP를 통해 원격 서버로 이동하는 것과 관련이 있습니다. 이들 중 일부는 출력을 구문 분석해야 하거나 User-Agent 헤더를 사용하여 서버가 일반 텍스트로 응답하도록 합니다. 이러한 변경은 매우 자주 발생합니다(삭제, 이름 변경, 광고, 출력 형식 변경 가능성 등).

  1. DNS 응답 프로토콜이 표준화되었습니다(형식은 계속 호환됩니다).
  2. 역사적으로 DNS 서비스(Akamai, Google Public DNS, OpenDNS 등)는 수명이 길고, 더 안정적이고, 더 확장성이 뛰어나며 일반적으로 오늘날 인기 있는 최신 유행 Whatismyip 닷컴 HTTP 서비스보다 더 많은 관심을 받는 경향이 있습니다.
  3. 이 방법은 본질적으로 더 빠릅니다(단 몇 밀리초!).

사용digOpenDNS 해석기 사용:

$ dig @resolver4.opendns.com myip.opendns.com +short

bashrc기억하기 쉽도록 이름에 별칭을 추가할 수도 있습니다.

# https://unix.stackexchange.com/a/81699/37512
alias wanip='dig @resolver4.opendns.com myip.opendns.com +short' 
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'
alias wanip6='dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6'

일반 IP 주소로 응답합니다.

$ wanip # wanip4, or wanip6
80.100.192.168 # or, 2606:4700:4700::1111

통사론

(줄여서https://ss64.com/bash/dig.html):

usage:  dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]

    q-type   one of (A, ANY, AAAA, TXT, MX, ...). Default: A.

    d-opt    ...
             +[no]short          (Display nothing except short form of answer)
             ...

    q-opt    one of:
             -4                  (use IPv4 query transport only)
             -6                  (use IPv6 query transport only)
             ...

쿼리 ANY유형은 AAAA 또는 A 레코드를 반환합니다. IPv4 또는 IPv6 연결을 구체적으로 선택하려면 그에 따라 -4또는 옵션을 사용하십시오 -6.

응답이 IPv4 주소가 되도록 요구하려면 ANY를 AIPv6의 경우 로 바꾸고 AAAA연결에 사용된 주소만 반환할 수 있습니다. 예를 들어 IPv6을 통해 연결할 때는 A 주소를 반환할 수 없습니다.

대체 서버

다음을 포함하여 많은 DNS 공급자가 이 서비스를 제공합니다.오픈 DNS,아카마이, 그리고구글 퍼블릭 DNS:

# OpenDNS (since 2009)
$ dig @resolver3.opendns.com myip.opendns.com +short
$ dig @resolver4.opendns.com myip.opendns.com +short
80.100.192.168

# OpenDNS IPv6
$ dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6
2606:4700:4700::1111

# Akamai (since 2009)
$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

# Akamai approximate
# NOTE: This returns only an approximate IP from your block,
# but has the benefit of working with private DNS proxies.
$ dig +short TXT whoami.ds.akahelp.net
"ip" "80.100.192.160"

# Google (since 2010)
# Supports IPv6 + IPv4, use -4 or -6 to force one.
$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

IPv4 주소를 구체적으로 요청하는 별칭의 예:

# https://unix.stackexchange.com/a/81699/37512
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'

$ wanip4
80.100.192.168

IPv6 주소의 경우:

# https://unix.stackexchange.com/a/81699/37512
alias wanip6='dig @ns1.google.com TXT o-o.myaddr.l.google.com +short -6'

$ wanip6
"2606:4700:4700::1111"

문제 해결

어떤 이유로 이 명령이 작동하지 않으면 네트워크 문제가 있을 수 있습니다. 먼저 위의 대안 중 하나를 시도해 보십시오.

다른 문제(업스트림 공급자, 명령줄 도구 또는 기타 도구 관련)가 의심되는 경우 +shortDNS 쿼리 세부 정보 표시를 선택하지 않고 이 명령을 실행하세요. 예를 들어:

$ dig @resolver4.opendns.com myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  A

;; ANSWER SECTION:
myip.opendns.com.   0   IN  A   80.100.192.168

;; Query time: 4 msec

おすすめ記事