ルーターの背後にいる場合、コマンドラインからパブリックIPアドレスを取得するにはどうすればよいですか?


37

コマンドラインでパブリック(WAN)IPアドレスを取得する方法はありますか?ISPによって動的IPアドレスが割り当てられたルーター(LANネットワーク)の背後にいます。

外部Webサービス(などifconfig.me)を使用するソリューションを見てきましたが、外部サービスなしでそれを実行できるかどうかを知りたいです。


ネットワークのセットアップに関する詳細を追加してください。あなたは、ルータ/スイッチの背後にあるDOESインターネットへのアクセス権を持っていて、ルータ/スイッチは、ISPから取得していることをWAN IPアドレスを把握しようとしていますか?
slm

私はISPによってルータに割り当てられたIPを見つけるために、ルータとアリの後ろ午前@slm
user61954

答えに追加した3番目の方法を参照してください。ルーターからWAN IPを取得する方法があるかどうかを確認する必要があります。ルーターはどのメーカー/モデルですか?
slm

何らかの外部サービスを照会する必要があります。一般的に、コンピューターは、他のコンピューターがどのIPアドレスからの接続であるかを認識しません。
デビッドシュワルツ

回答:


27

お使いのシステムと仮定すると2つのイーサネットデバイスを持っている、eth0eth1して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アドレスを確認してください


私は、ルータに私のシステムが接続するようなものを持って、それはintrnetに接続されている
user61954

5
彼は直接接続していないと述べたためeth*、WAN IPを持たないデバイスはありません。彼のルーターがsshをサポートしていない限り、彼はアクセス権があり、ifconfigがありますが、これは機能しません。ダウンボーティングではありませんが、これを行おうとする人は誰でも知っています。
アーロンLS

彼の質問を読み直してください。彼は、インターネットアクセスではなく、アイテム#1であるLANアクセスを持っていると言います。アイテム#2は、彼がISPから動的IPを取得していると言っています。彼は、LANのみの接続とインターネットにb / wで別のシステムがあるか、または彼とインターネットにb / wホームルーター/スイッチがあると仮定しています。
slm

Downvoters、コメントを残してみてください、この答えは断然最も完全であり、まだ人々は投票しています。@ user61954は彼のコメントで、彼はルーターの後ろにいると言っているので、私が説明した方法の1つは機能します。
slm

私は賛成しました。しかし、1番目と2番目の方法は機能せず、localipアドレスのみを返します。ありがとう!
ジャレッドバロウズ

12

システムにcurlがインストールされている場合(ほとんどの場合)、次を使用できます。

curl ifconfig.me

ちょっと、ありがとう、これは私への助けです。たった一つの質問、「ifconfig.me」とは何ですかifconfig関数を知っていますが、私は通常これではありません。それについて読んだり説明したりするリンクを教えてください。-更新-質問を読みませんでした。アップ
ABY W

ifconfig.meは、IPを提供するWebサイトです。
ロリー

ifconfig.meはhttpsをサポートしていないため、なりすましの可能性があります。VPNが起動しているかどうかを確認するために使用することはお勧めできません。
ダンダスカレスク

9

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

5

ほとんどの場合、外部サービスを使用する必要がない、または使用できない場合、ルーターは外部IPを取得する方法を提供する必要があります(既に示した他の回答のように)。外部サービスの場合、他のほとんどの回答では、Webサービスが使用されます。Unix SEでのこの回答は、代わりにDNSを使用することを示唆しています。

たとえば、OpenDNSをリゾルバーとして使用digする場合:

dig +short myip.opendns.com @resolver1.opendns.com

+1、しかしその日の終わりcurl ident.meには、特定のサービスを使用しているのと同じです(myip.opendns,com
劇場の

4

sshまたはcurlを使用してルーターから情報を取得します。

私はカールを使用してdyndnsにパブリックIPを要求しますが、そのようなコマンドはあなたに当てはまらないようです?

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'


2

残念ながら、NATのようなリモートサービスへの接続を伴わないメカニズムを検出する方法はありません。NATは本質的に、壊れたサービスに加えて、ユーザーに対して完全に透過的であり、NAT発見のための標準プロトコルはありません。

しかし、外部サービスに関する限り、IPv4とIPv6の両方に使用できる、私が書いた高速でシンプルなident.meを提案する必要があります。使用できる最も単純な形式でcurl ident.meあり、完全なAPIはhttp://api.ident.me/で文書化されています


1

ルーターがNAT PMP(ポートマッピングプロトコル)をサポートしている場合、natpmpを使用してパブリックIPを取得できる場合があります。

natpmpcと呼ばれるLinux natpmpライブラリへのコマンドラインインターフェイスがあります。Ubuntuでは、natpmp-utilsパッケージに含まれています。私のルーターはnatpmpをサポートしていないようですので、natpmpcユーティリティがパブリックIPを返すかどうかはわかりません。


0

求めているlinuxコマンドはifconfig、インターネットに直接接続していると仮定しています。

そうでなく、プロキシまたは特別なルーティングを介してアクセスする場合、最も簡単な方法は(他の人が示すように)別のホストにログイン/アクセスし、そこからチェックすることです。

また、友好的な近所のシステム管理者とこの質問について話し合うこともできます。


ifconfig非推奨です。
BatchyX

「tracerouteコマンド。ただし、lanのローカルIP、192.168.1.1を提供します」。だから私はLANがあると思います。したがって、何らかの種類のルーター/ゲートウェイ/ natがどこかに存在する必要があります。次に、opのcompがインターネットに直接接続されていないため、ifconfigはパブリックIPアドレスを提供しません。

@BatchyX。どのOSを実行していますか?私が実行しているすべてのシステムにはifconfigがあります。Fedoraの、CentOSのは、Ubuntuなど
SLM

2
@batchx:そして、その情報はどこで入手できますか?私はそのことについてあなたに同意しません。
mdpc

1
@sim:コマンドが存在するからといって、廃止されないわけではありません。ただ、見てifconfig、最新のリリース日。次にìproute2最新リリースをご覧ください。ソースについては、lartc.org
howto / lartc.iproute2.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.