이 문제: "Bash에서 외부 IP 주소를 얻는 방법은 무엇입니까?"
dig를 호출하여 문제를 해결하십시오.
dig +short myip.opendns.com @resolver1.opendns.com;
이는 단일 UDP 패킷을 포함하므로 가능한 가장 빠른 솔루션입니다.
하지만 이것은 OpenDNS라는 하나의 웹사이트일 뿐입니다. 다른 옵션이 있습니까?
그리고 기본적으로 제공되지 않는 dig를 사용하세요. 또 다른 옵션이 있나요?
노트: 포트 53의 (또한 로컬) 리디렉션으로 인해 OpenDNS 서비스가 로컬에서 작동하지 않기 때문에 이 문제를 해결해야 합니다. 드디어 이유를 찾았습니다(리디렉션을 잊어버렸습니다). 먼저 다음 명령을 사용하여 dnssec이 제대로 작동하는지 확인합니다( ad
플래그가 로컬에서 누락됨).
dig pir.org +dnssec +multi
또한 이 명령을 사용하여 ISP가 OpenDNS 확인을 리디렉션하고 있는지 확인할 수 있습니다.
host -t txt which.opendns.com 208.67.220.220
리디렉션되면 다음과 같은 답변을 얻게 됩니다."I am not an OpenDNS resolver."
답변1
또 다른 옵션은 Google DNS입니다.
myip(){ dig @8.8.8.8 -t txt o-o.myaddr.l.google.com |
grep "client-subnet" |
grep -o "\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)" ; }
시스템에 dig가 없으면 호스트는 정확히 동일합니다.
myip(){ host -t txt o-o.myaddr.l.google.com 8.8.8.8 |
grep -oP "client-subnet \K(\d{1,3}\.){3}\d{1,3}"; }
-P
GNU grep(Perl 유사) 및 기본(BRE) 정규 표현식이 표시됩니다.
물론 원본 웹사이트도 작동합니다.
파기:
myip(){ dig myip.opendns.com @208.67.220.222 |
grep "^myip\.opendns\.com\." |
grep -o "\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)" ; }
호스트와 함께:
myip(){ host myip.opendns.com 208.67.220.222 |
grep -oP "^myip\.opendns\.com.* \K(\d{1,3}\.){3}(\d{1,3})" ; }
위의 두 스니펫은 다음 네 가지 OpenDNS 확인자 주소 중 하나에서 작동합니다.
echo 208.67.22{0,2}.22{0,2}
나중에 직접 DNS 확인이 실패하면 컬을 사용하여 다음 사이트(URL) 중 하나에 액세스하세요.
IFS=$'\n' read -d '' -a urls <<-'_end_of_text_'
api.ipify.org
bot.whatismyipaddress.com/
canhazip.com/
checkip.dyndns.com/
corz.org/ip
curlmyip.com/
eth0.me/
icanhazip.com/
ident.me/
ifcfg.me/
ifconfig.me/
ip.appspot.com/
ipecho.net/plain
ipof.in/txt
ip.tyk.nu/
l2.io/ip
tnx.nl/ip
wgetip.com/
whatismyip.akamai.com/
_end_of_text_
다음과 같이 배열 주소를 호출합니다.
$ i=5; curl -m10 -L "http://${urls[i]}"
116.132.27.203
일부 웹사이트에서는 https도 작동할 수 있습니다.
답변2
나는 이러한 항목 중 다수가 귀하의 네트워크 트래픽 및/또는 귀하가 이 정보를 요청한 서비스를 스니핑하는 누군가에게 귀하를 식별할 수 있는 비콘이라는 결론을 내렸습니다.
귀하의 개인 정보를 보호하는 서비스에 대해 HTTPS 쿼리를 수행하는 것이 좋습니다.
wget -qqO- 'https://duckduckgo.com/?q=what+is+my+ip' \
| grep -Pow 'Your IP address is \K[0-9.]+'
(임베디드 시스템이나 기타 제한된 시스템을 사용 중이고 (libpcre)가 없는 경우 grep -P
대신 이를 사용하십시오… | grep -ow 'Your IP address is [0-9.]*[0-9]' | grep -ow '[0-9][0-9.]*'
.)
귀하(및/또는 귀하의 IP에 있는 다른 사람)가 개인 정보 보호에 초점을 맞춘 서비스를 사용하지 않는 경우덕고검색 엔진이라면 이것이 신호일 수도 있습니다(귀하의 쿼리 자체는 제3자가 해석할 수 없지만 쿼리가 너무 많다는 사실이 너무 과할 수도 있습니다). Google에서도 동일한 작업을 수행할 수 있지만 Google은 wget 및 유사한 유틸리티에 대한 액세스를 명시적으로 거부하므로 사용자 에이전트를 위조해야 합니다.
wget -U Mozilla/5.0 -qqO- 'https://www.google.com/search?q=what+is+my+ip' \
| grep -Po '>\K[0-9.]{7,}(?=<.{0,99}>Your public IP)'
이는 Google의 이용약관을 위반할 수 있습니다.
아마도 정규식을 변경해야 할 것 같습니다.수업IPv6의 경우 ~부터 [0-9.]
. [0-9a-f:]
네가 그랬다면 어땠을지 모르겠어듀얼 스택.
답변3
나는 다음을 사용합니다 :
dig @1.1.1.1 TXT whoami.cloudflare.com +short | tr -d \"
또는 다음을 사용하여 host
:
$ host=whoami.cloudflare.com
$ host -t TXT "$host" 1.1.1.1 | sed -En "s/^$host.+"'"([^"]*)"/\1/p'