쉘 스크립트에서 외부 IP 주소를 얻으려면 어떻게해야합니까? 스크립트에서 외부 IP 주소를 찾아야합니다. 현재이 기능을

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

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

그러나이에 따라 perl-libwww, perl-html-format, perl-html-tree설치. 외부 IP를 얻을 수있는 다른 방법은 무엇입니까?



답변

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

아래의 다른 답변의 대부분은 HTTP를 통해 원격 서버로 이동하는 것과 관련이 있습니다. 이들 중 일부는 출력을 구문 분석해야하거나 서버가 일반 텍스트로 응답하도록 User-Agent 헤더에 의존했습니다. 그것들은 아주 자주 바뀝니다 (아래로 내려 가고, 이름을 바꾸고, 광고를 올리거나, 출력 형식을 바꿀 수 있습니다).

  1. DNS 응답 프로토콜은 표준화되어 있습니다 (형식은 계속 호환됩니다).
  2. 역사적으로, DNS 서비스 ( OpenDNS , Google Public DNS ..)는 오늘날 새로운 힙합 whatismyip.com HTTP 서비스보다 더 오래 지속되고보다 안정적이며 확장 가능하며 일반적으로 더 잘 보입니다.
  3. 이 방법은 본질적으로 더 빠릅니다 (몇 밀리 초 만 가능합니다).

리졸버 digOpenDNS 와 함께 사용 :

dig @resolver1.opendns.com ANY myip.opendns.com +short

아마도 당신의 별명 bashrc으로 기억하기 쉽습니다.

alias wanip='dig @resolver1.opendns.com ANY myip.opendns.com +short'

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

$ wanip
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 주소를 반환 할 수 없습니다.

대체 서버 및 예

OpenDNS 외에도 Akamai와 Google에서 제공하는 유사한 DNS 서비스가 있습니다.

$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

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

alias wanip4='dig @resolver1.opendns.com A myip.opendns.com +short -4'

$ wanip4
80.100.192.168

그리고 IPv6의 경우 :

alias wanip6='dig @resolver1.opendns.com AAAA myip.opendns.com +short -6'

$ wanip6
2606:4700:4700::1111

문제 해결

어떤 이유로 명령이 작동하지 않으면 업스트림 공급자, 명령 줄 도구 또는 기타 문제가있을 수 있습니다. 작동하지 않는 이유를 이해하려면 +short옵션 없이 명령을 실행 하여 DNS 조회의 세부 사항을 표시하십시오. 예를 들면 다음과 같습니다.

$ dig @resolver1.opendns.com ANY myip.opendns.com

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

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

;; ANSWER SECTION:
myip.opendns.com.   0   IN  AAAA    2606:4700:4700::1111

;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011

답변

참고 : 이것은 외부 IP 주소 (인터넷에있는 서버가 서버를 연결할 때 표시되는 주소)에 대한 것입니다. 내부 IP 주소 를 원할 경우 (자체 컴퓨터가 연결에 사용하는 것과 다를 수 있음)이를 참조 하십시오. 대답 .

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

DNS를 사용하는 가장 빠른 방법 :

dig +short myip.opendns.com @resolver1.opendns.com

또는 externalip 사용 :

externalip dns

HTTP를 사용하는 가장 빠른 방법 :

curl -s http://whatismyip.akamai.com/

또는 externalip 사용 :

externalip http

유효한 인증서로 HTTPS를 사용하는 것이 가장 빠릅니다.

curl -s https://4.ifcfg.me/

또는 externalip 사용 :

externalip https

텔넷 사용 :

nc명령

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

또는 externalip 사용 :

externalip telnet

telnet명령

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

FTP 사용 :

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

또는 externalip 사용 :

externalip ftp

위의 모든 내용은 다음과 같이 externalip 스크립트를 사용하여 실행할 수 있습니다 .

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

이제 긴 이야기 …

특히 여기 또는 다른 곳에 게시 된 HTTP를 통해 외부 IP를 제공하는 다양한 서버 옵션이 많이 있습니다.

나는 그들 중 하나가 다른 것보다 더 나은지 확인하기 위해 벤치 마크를 만들었고 결과에 놀랐습니다. 예를 들어 가장 널리 권장되는 ifconfig.me 중 하나가 거의 항상 느리게 반응하기까지 몇 초가 걸리기도했습니다. 많은 사람들이 HTTPS를 통해 작동하지 않거나 작동하지만 유효하지 않은 인증서를 가지고 있습니다. 일부 응답 시간이 매우 일치하지 않습니다.

벤치 마크

HTTP와 HTTPS

이것이 내가 사용한 externalip-benchmark 스크립트의 소스입니다.

여기에 언급 된 서비스 중 어떤 서비스를 사용할 가치가 있는지 직접 확인할 수 있습니다.

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

바르샤바에서 2015-04-03에 얻은 결과-무고한 사람들을 보호하기 위해 주소가 변경되었습니다.

최고의 HTTP 응답 시간 :

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

최고의 https 응답 시간 :

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(참고 : 내용이 비어있는 일부 빠른 응답이 있습니다. 잘못된 응답입니다.)

최고의 평균 핑 시간 :

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

다음은 암스테르담에서 2015-04-03에 얻은 결과입니다.

최고의 HTTP 응답 시간 :

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

최고의 https 응답 시간 :

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

최고의 평균 핑 시간 :

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

999999 핑은 100 % 패킷 손실을 의미합니다.

DNS

비교를 위해 바르샤바와 암스테르담에서 2015-06-16에 테스트 한 다른 방법이 있습니다.

사용 :

time dig +short myip.opendns.com @resolver1.opendns.com

일반적으로 소요되는 시간 (실시간 시계 시간) :

  • 바르샤바에서 0.035
  • 암스테르담에서 0.015 초

실제로있다 이 방법을 사용할 수 있습니다 리졸버는 :

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

바르샤바와 암스테르담에서 모두 동일한 응답 시간을 제공하지만 다른 지역에서는 그렇지 않을 수 있습니다.

208.67.222.222 사용-도메인 이름 대신 resolver1.opendns.com의 IP가 더 빠릅니다.

  • 바르샤바에서 0.023
  • 암스테르담에서 0.009 초

그러나 IP가 변경되면 향후에는 작동하지 않을 수 있습니다 (잘 알려진 DNS 해석 프로그램에는 적합하지 않을 수 있습니다-아마도 외부 IP 스크립트 에서 IP를 사용해야합니다 -의견을 보내 주십시오).

텔넷

텔넷 nc또는 telnet명령 (위 참조)은 일반적으로 다음을 수행합니다.

  • 바르샤바에서 0.103
  • 암스테르담에서 0.035s

( nctelnet명령 사이에는 눈에 띄는 차이가 없습니다 .)

FTP

  • 바르샤바에서 0.104s
  • 암스테르담에서 0.036s

도메인 이름

주어진 서비스의 도메인 이름 대신 IP 주소가 사용될 때 (특히 처음으로 실행될 때) 모든 방법이 더 빠릅니다 (호스트 기반 가상 서버를 사용할 수 있고 베어 IP에서는 작동하지 않는 HTTP 제외)- 서비스가 IP 주소를 변경하면 더 빠르지 만 미래에 대한 증거는 줄어들 수 있습니다.

코멘트

귀하의 위치에서 흥미로운 결과를 보거나 내가 선택한 호스트 대신 다른 호스트를 추천해야한다고 생각되면 의견을 게시하십시오. 중요한 서비스가 누락 된 경우 GitHub에 의견을 게시하거나 문제 를 게시하십시오. 이 게시물을 최신 성능의 최신 서비스로 업데이트하고 싶습니다.


답변

 curl -s http://whatismijnip.nl |cut -d " " -f 5

네덜란드 작업 사이트로 교체되었습니다.


답변

이후 whatsmyip.orgifconfig.me은 이미 언급되었다 :

curl -s icanhazip.com

답변

whatismyip.org의 대안으로 ifconfig.me 를 사용할 수 있습니다 .

curl -s http://ifconfig.me

또한 ifconfig.me에는 추가 기능이 있습니다. 다른 정보를 얻으려면 웹 사이트를 방문하십시오.


답변

wget -O - -q http://whatismyip.org/

답변

아마존 AWS

curl https://checkip.amazonaws.com

샘플 출력 :

123.123.123.123

난 그게 좋아 왜냐하면:

  • 평문 IP 만 반환합니다.
  • 그것은 곧 오프라인으로 갈 것 같지 않은 잘 알려진 공급자로부터 온 것입니다.