コマンドラインでパブリック(WAN)IPアドレスを取得する方法はありますか?ISPによって動的IPアドレスが割り当てられたルーター(LANネットワーク)の背後にいます。
外部Webサービス(などifconfig.me)を使用するソリューションを見てきましたが、外部サービスなしでそれを実行できるかどうかを知りたいです。
コマンドラインでパブリック(WAN)IPアドレスを取得する方法はありますか?ISPによって動的IPアドレスが割り当てられたルーター(LANネットワーク)の背後にいます。
外部Webサービス(などifconfig.me)を使用するソリューションを見てきましたが、外部サービスなしでそれを実行できるかどうかを知りたいです。
回答:
お使いのシステムと仮定すると2つのイーサネットデバイスを持っている、eth0とeth1してeth0、あなたのLANに接続され、IPアドレス192.168.1.Xを言うと、あなたのeth1次の使用したいとしているデバイスは、お使いのISP(WAN)に接続されているifconfigため、あなたのIPを取得するためのコマンドをWAN側。
注:最初の2つの方法は、2つのイーサネットデバイスがあるコンピューターに対して実行し、そのうちの1つがISP(ケーブルモデムまたはDSLモデム)に接続されていることを前提としています。このシナリオでは、インターネット上のIPアドレス(WAN IP)でイーサネットデバイス(eth1)が構成されます。
第一の方法
                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+
% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33
ipコマンドを使用することもできます。
% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33
第二の方法
LANのみにあるシステムからこれを見つける必要がある場合、パスフレーズなしのsshキーをセットアップし、それをLANマシンのアカウントに追加して、WANアクセスでシステムにリモートアクセスできるようにします。
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+
% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33
第三の方法
WANアクセスが可能なボックスにsshできず、LinksysやNetgearボックスなどのホームルーター/スイッチを使用している場合。HTTPステータスページを介してそのデバイスからIPを取得できる場合があります。このwhatismyip.comフォーラムの投稿で説明されている内容と同様のことを過去にも行ってきました。
                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+
# something like this....
% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2
注:このアプローチは、Linksys、Netgearなどのブランドであるかどうかにかかわらず、使用しているルーター/スイッチに大きく依存します。それぞれに、WAN IPを含む独自の一意のページがあります。
4番目の方法
WAN IPアドレスを報告する外部インターネットサイトに対してクエリを送信します。
注:元の質問では、このアプローチに代わるものを探していると述べていましたが、この回答がすべてのベースを網羅するようにここに入れています。
                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+
# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33
# 2nd server
% curl 'https://api.ipify.org?format=json'
{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33
# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33
追加情報はこちらから入手できます:HOWTO:コマンドラインから外部IPアドレスを確認してください
eth*、WAN IPを持たないデバイスはありません。彼のルーターがsshをサポートしていない限り、彼はアクセス権があり、ifconfigがありますが、これは機能しません。ダウンボーティングではありませんが、これを行おうとする人は誰でも知っています。
                    システムにcurlがインストールされている場合(ほとんどの場合)、次を使用できます。
curl ifconfig.me
              UPNPを備えたNATルーターの背後にいる場合、miniupnpcを使用してWAN IPアドレスを検出できます。
# debian/ubuntu setup: 
# sudo apt-get install miniupnpc
# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-
次のようなcronなどのスクリプトで使用できます。
#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#
EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi
              ほとんどの場合、外部サービスを使用する必要がない、または使用できない場合、ルーターは外部IPを取得する方法を提供する必要があります(既に示した他の回答のように)。外部サービスの場合、他のほとんどの回答では、Webサービスが使用されます。Unix SEでのこの回答は、代わりにDNSを使用することを示唆しています。
たとえば、OpenDNSをリゾルバーとして使用digする場合:
dig +short myip.opendns.com @resolver1.opendns.com
              curl ident.meには、特定のサービスを使用しているのと同じです(myip.opendns,com
                    残念ながら、NATのようなリモートサービスへの接続を伴わないメカニズムを検出する方法はありません。NATは本質的に、壊れたサービスに加えて、ユーザーに対して完全に透過的であり、NAT発見のための標準プロトコルはありません。
しかし、外部サービスに関する限り、IPv4とIPv6の両方に使用できる、私が書いた高速でシンプルなident.meを提案する必要があります。使用できる最も単純な形式でcurl ident.meあり、完全なAPIはhttp://api.ident.me/で文書化されています
求めているlinuxコマンドはifconfig、インターネットに直接接続していると仮定しています。  
そうでなく、プロキシまたは特別なルーティングを介してアクセスする場合、最も簡単な方法は(他の人が示すように)別のホストにログイン/アクセスし、そこからチェックすることです。
また、友好的な近所のシステム管理者とこの質問について話し合うこともできます。
ifconfig非推奨です。
                    ifconfig、最新のリリース日。次にìproute2最新リリースをご覧ください。ソースについては、lartc.org