この問題: "Bashから外部IPアドレスを取得するには?」
digを呼び出して問題を解決します。
dig +short myip.opendns.com @resolver1.opendns.com;
これは単一のUDPパケットを含むため、可能な限り最速のソリューションです。
しかし、これはOpenDNSという1つのウェブサイトにすぎません。他のオプションはありますか?
そしてデフォルトでは提供されていない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})" ; }
上記の2つのスニペットは、次の4つの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
一部のWebサイトではhttpsも機能する可能性があります。