쉘 스크립트에서 외부 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
답변2
참고: 이는 대략적인 것입니다.외부IP 주소(인터넷에서 서버에 연결할 때 표시되는 주소) - 원하는 경우내부IP 주소(자신의 컴퓨터가 연결하는 데 사용하는 IP 주소, 다를 수 있음) 참조이 답변.
TL;DR - 2015년 가장 빠른 방법
DNS를 사용하는 가장 빠른 방법:
dig +short myip.opendns.com @resolver4.opendns.com
또는 사용외부 IP:
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
위의 모든 내용은 my를 사용하여 실행할 수 있습니다.외부 IP스크립트는 다음과 같습니다
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년 4월 3일 바르샤바에서 실시한 결과 - 무고한 사람들을 보호하기 위해 주소가 변경되었습니다.
최고의 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년 4월 3일 암스테르담에서 얻은 결과는 다음과 같습니다.
최고의 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 ping은 100% 패킷 손실을 의미합니다.)
도메인 명 시스템
비교를 위해 다른 방법으로 측정한 시간은 다음과 같습니다. 2015년 6월 16일 바르샤바와 암스테르담에서 테스트되었습니다.
사용:
time dig +short myip.opendns.com @resolver1.opendns.com
일반적으로 대략 다음과 같은 시간이 소요됩니다(실제 벽시계 시간).
- 바르샤바에서 0.035초
- 암스테르담에서 0.015초
실제로는 있습니다4개다음과 같이 사용할 수 있는 파서:
- Resolver1.opendns.com
- Resolver2.opendns.com
- Resolver3.opendns.com
- 解析器4.opendns.com
他们在华沙和阿姆斯特丹的响应时间都相同,但在其他地方可能并非如此。
使用 208.67.222.222 -resolver1.opendns.com 的 IP 而不是其域名更快:
- 距离华沙 0.023 秒
- 距阿姆斯特丹 0.009 秒
但如果 IP 发生变化,将来可能无法工作(尽管对于知名的 DNS 解析器来说这可能不太可能 - 也许我应该在我的 IP 中使用该 IP)外部IP脚本 - 请评论)。
远程登录
nc
使用或telnet
命令(见上文)进行 Telnet通常需要:
- 距华沙 0.103 秒
- 距阿姆斯特丹 0.035 秒
nc
(和telnet
命令之间没有明显区别。)
文件传输协议
- 距离华沙 0.104 秒
- 距阿姆斯特丹 0.036 秒
域名
当使用 IP 地址而不是给定服务的域名时,所有方法都会更快(尤其是第一次运行时)(HTTP 除外,它可以使用基于主机的虚拟服务器并且不能使用裸 IP -未测试),但当服务更改 IP 地址时将停止工作,因此它可能会更快,但不太适合未来。
评论
如果您在您的位置看到一些有趣的结果,或者您认为应该推荐其他一些主机而不是我选择的主机,请发表评论。如果有什么重要的服务缺失,请评论或发布问题在 GitHub 上。我希望通过当前选择的性能最佳的服务来更新这篇文章。
답변3
curl -s http://whatismijnip.nl |cut -d " " -f 5
将网站替换为荷兰工作网站。
답변4
亚马逊AWS
curl https://checkip.amazonaws.com
示例输出:
123.123.123.123
也适用于浏览器:http://checkip.amazonaws.com
我喜欢它因为:
- 它只返回回复正文中的明文 IP,没有其他内容
- 它来自一家知名提供商,不太可能很快下线