쉘 스크립트에서 외부 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 헤더를 사용하여 서버가 일반 텍스트로 응답하도록 합니다. 이러한 변경은 매우 자주 발생합니다(삭제, 이름 변경, 광고, 출력 형식 변경 가능성 등).
- DNS 응답 프로토콜이 표준화되었습니다(형식은 계속 호환됩니다).
- 역사적으로 DNS 서비스(Akamai, Google Public DNS, OpenDNS 등)는 수명이 길고, 더 안정적이고, 더 확장성이 뛰어나며 일반적으로 오늘날 인기 있는 최신 유행 Whatismyip 닷컴 HTTP 서비스보다 더 많은 관심을 받는 경향이 있습니다.
- 이 방법은 본질적으로 더 빠릅니다(단 몇 밀리초!).
사용dig
OpenDNS 해석기 사용:
$ 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를 A
IPv6의 경우 로 바꾸고 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"
문제 해결
어떤 이유로 이 명령이 작동하지 않으면 네트워크 문제가 있을 수 있습니다. 먼저 위의 대안 중 하나를 시도해 보십시오.
다른 문제(업스트림 공급자, 명령줄 도구 또는 기타 도구 관련)가 의심되는 경우 +short
DNS 쿼리 세부 정보 표시를 선택하지 않고 이 명령을 실행하세요. 예를 들어:
$ 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