シェルスクリプトから外部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ヘッダーに依存していました。それらは非常に頻繁に変更されます(ダウン、名前の変更、広告の掲載、出力形式の変更など)。
- DNS応答プロトコルは標準化されています(形式は互換性を維持します)。
- 歴史的に、DNSサービス(Akamai、Google Public DNS、OpenDNS、..)は、新しい流行のwhatismyip dot-com 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アドレスを返すことはできません。
代替サーバー
OpenDNS、Akamai、Google Public 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"
トラブルシューティング
何らかの理由でコマンドが機能しない場合は、ネットワークに問題がある可能性があります。最初に上記の選択肢の1つを試してください。
関連:外部RAIDドライブからデータを回復しようとしていますか?
別の問題が疑われる場合(アップストリームプロバイダー、コマンドラインツール、またはその他の問題)、+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