web-dev-qa-db-ja.com

パブリックIPを決定するためのコマンド?

google で確認すると、パブリックIPを確認できます。 Ubuntuのコマンドラインに同じ答えが得られるものがありますか?

628
kfmfe04

ルーターの後ろにいない場合は、ifconfigを使用して確認できます。

ルーターの背後にいる場合、ルーターはネットワークアドレス変換を行うため、コンピューターはパブリックIPアドレスを認識しません。いくつかのWebサイトで、パブリックIPアドレスがcurlまたはwgetを使用しているものを尋ね、そこから必要な情報を抽出できます。

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

以下

curl https://ipinfo.io/ip
907
Michael K

外部IPを見つけるには、外部Webベースのサービスを使用するか、システムベースの方法を使用します。より簡単な方法は外部サービスを使用することです。また、ifconfigベースのソリューションは、NATの背後にいない場合にのみシステムで動作します。 2つの方法については、以下で詳しく説明します。

外部サービスを使用して外部IPを見つける

最も簡単な方法は、コマンドラインブラウザーまたはダウンロードツールを介して外部サービスを使用することです。 Ubuntuではwgetがデフォルトで使用可能であるため、それを使用できます。
IPを見つけるには、

$ wget -qO- https://ipecho.net/plain ; echo

礼儀

また、lynxの代わりにcurl(browser)またはwgetを使用して、上記のコマンドを少し変更して、外部IPを見つけることもできます。

curlを使用してIPを検索します。

$ curl https://ipecho.net/plain

より良いフォーマットの出力を使用するには:

$ curl https://ipecho.net/plain ; echo

リゾルバーとしてDigとともにOpenDNSを使用する、より高速な(おそらく最速の)メソッド:

ここでの他の回答はすべてHTTP経由でリモートサーバーに送られます。それらのいくつかは、出力の解析を必要とするか、User-Agentヘッダーに依存してサーバーがプレーンテキストで応答するようにします。また、非常に頻繁に変更されます(下に行く、名前を変更する、広告を表示する、出力形式を変更するなど)。

  1. DNS応答プロトコルは標準化されています(形式は互換性を維持します)。
  2. 歴史的に、DNSサービス(OpenDNS、Google Public DNSなど)は、今日流行している新しいwhatismyip.com HTTPサービスよりもずっと長く生き残る傾向があり、安定性、拡張性が高く、一般的に管理されています。
  3. (マイクロ最適化を重視するオタクの場合)、このメソッドは本質的に高速である必要があります(数マイクロ秒だけ)。

リゾルバとしてOpenDNSでDigを使用する:

$ Dig +short myip.opendns.com @resolver1.opendns.com

111.222.333.444

からコピー:https://unix.stackexchange.com/a/81699/14497

外部サービスに依存せずに外部IPを見つける

  • ネットワークインターフェース名がわかっている場合

端末に次のように入力します。

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

上記で、<interface_name>を実際のインターフェースの名前に置き換えます。例:eth0eth1pp0など...

使用例:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
  • ネットワークインターフェース名がわからない場合

端末に次のように入力します(これにより、システム内のすべてのネットワークインターフェイスの名前とIPアドレスが取得されます)。

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

使用例:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444

N.B:出力は指標であり、実際のものではありません。

礼儀:https://www.if-not-true-then-false.com/2010/linux-get-ip-アドレス/

UPDATE

  1. LANG=cifconfigベースの使用法に追加されたため、ロケール設定に関係なく、常に英語の出力が得られます。
384
saji89

私のお気に入りはいつも:

curl ifconfig.me

シンプルで入力しやすい。

最初にcurlをインストールする必要があります;)

Ifconfig.meがダウンしている場合は、icanhazip.comまたはipecho.netを試してください。

curl icanhazip.com

または

curl ipecho.net
116
Panther

icanhazip.com は私のお気に入りです。

curl icanhazip.com

IPv4を明示的に要求できます。

curl ipv4.icanhazip.com

curlがない場合は、代わりにwgetを使用できます。

wget -qO- icanhazip.com
60
yprez

私はすべてが煩わしくて遅いことがわかったので、自分で書きました。シンプルで高速です。

そのAPIは http://api.ident.me/ にあります

例:

curl ident.me
curl v4.ident.me
curl v6.ident.me
48
Pierre Carrier

HTTP要求の代わりにDNS要求を使用して、パブリックIPを見つけることができます。

$ Dig +short myip.opendns.com @resolver1.opendns.com

resolver1.opendns.com dnsサーバーを使用して、魔法のmyip.opendns.comホスト名をyour ipアドレスに解決します。

42
jfs

Amazon AWS

curl http://checkip.amazonaws.com

サンプル出力:

123.123.123.123

私はそれが好きです:

  • プレーンテキストIPのみを返し、それ以外は何も返しません
  • すぐにオフラインになることはほとんどない有名なプロバイダーからのものです

私が使用しているものは:

wget -O - -q icanhazip.com

はい、IPを使用できます:-)

18
jflaflamme

これを正確に入力して、を押します Enter 示されている場合:

telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
Host: ipecho.net Enter
BROWSER: web-kitEnter
Enter

これにより、HTTP要求が手動で送信され、HTTP/1.1 200 OK replyの下部にあるIPが返されます

出力例:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
Host: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
11
Liam

もう1つの高速(比較的高速かもしれません)

curl ipecho.net/plain
9
Mohnish

このため、 STUN が発明されました。クライアントとして、公開されているSTUNサーバーにリクエストを送信し、表示されるIPアドレスを返すことができます。低レベルのwhatismyip.comは、HTTPおよび巧妙に作成されたDNSサーバーを使用せず、非常に高速なSTUNプロトコルを使用しているため、ソートされています。

stunclientを使用

stunclientがインストールされている(debian/ubuntuのapt-get install stuntman-client)場合は、次のようにします。

$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

ここで、A.B.C.Dはローカルネット上のマシンのIPアドレスであり、W.X.Y.Zは外部(および探しているWebサイト)から見えるIPアドレスサーバーです。 sedを使用すると、上記の出力をIPアドレスのみに減らすことができます。

stunclient stun.services.mozilla.com |
    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

ただし、あなたの質問はコマンドラインを使用してそれを見つける方法であり、STUNクライアントの使用を除外する可能性があります。だから私は疑問に思う...

bashを使用

STUNリクエストは手作りで、netcatを使用して外部STUNサーバーに送信し、ddhexdumpおよびsedを使用して後処理できます。

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

エコーは、Cookie 0xc00ceeおよびWiresharkから貼り付けられたものを含む、長さ8(0x0008)のバイナリSTUN要求(0x0001はBinding Requestを示します)を定義します。外部IPを表す4バイトのみが回答から取得され、クリーニングおよび印刷されます。

動作しますが、実稼働での使用は推奨されません:-)

追伸SIPおよびWebRTCのコアテクノロジーであるため、多くのSTUNサーバーが利用可能です。 Mozillaのいずれかを使用することはプライバシーに関して安全であるはずですが、別の方法を使用することもできます。 STUNサーバーリスト

9
Victor Klos

私はこのためにtelnetで愚かなサービスを提供しています。このようなもの:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

気軽に使用してください。

7
Gelma

curlwgetなしで、bashのみを使用してWebページを読むことができます。

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
5
jfs

DD-WRTを使用している場合、これは私のために機能します:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'

または

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
  • 192.168.1.1は、DD-WRTルーターのゲートウェイ/ルーターLAN IPアドレスです。

  • -sコンポーネントはサイレントを意味します(つまり、カール進行情報を表示しません)。

  • ああ、私は"DD-WRT v24-sp2(01/04/15)std"で上記を使用していることに言及すべきです。
2
CMP

Ipogre.comでcURLを使用します(IPv4およびIPv6がサポートされています)。

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

http://www.ipogre.com/faqs/linux.php

2
Jacob

ルーターにログインアクセスできるユーザーにとって、スクリプトを使用して、ルーターのWAN IPアドレスを尋ねるのが、外部IPアドレスを決定する最も効率的な方法です。たとえば、次のpythonスクリプトは、Medialink MWN-WAPR300Nルーターの外部IPを出力します。

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

これは非常に安全ではないことに注意してください(プレーンテキストの資格情報とほとんどのルーターへのログインの場合のように)、そして確かに移植性がありません(ルーターごとに変更する必要があります)。ただし、これは非常に高速で、物理的に安全なホームネットワーク上で完全に合理的なソリューションです。

別のルーター用にスクリプトをカスタマイズするには、firefoxのtamperdataアドオンを使用して、作成するHTTPリクエストを決定することをお勧めします。

2
cronburg

これらはローカルIPを取得します:

ifconfig

または短い出力の場合:

ifconfig | grep inet

また

ip addr show

そしておそらく:

hostname -I

これにより、外部IPが取得されます。

wget http://smart-ip.net/myip -O - -q ; echo

N.B。curlのインストールを気にしない場合、これも:

curl http://smart-ip.net/myip
2
Wilf

Ubuntuタイプにlynxをインストールした場合

lynx bot.whatismyipaddress.com
1
Binny

多くのホームルーターは、UPnPで照会できます。

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

次に、回答からIPアドレスをgrepします。

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
1
user372194

私は少し遅れているかもしれませんが、inxiはかなり簡単にできます。

インストールinxi

Sudo apt install inxi

次に、次のコマンドを実行します

inxi -i

次のようなサイトへのコピーと貼り付けにzオプションを使用してブロックされた私の情報の例:

~$ inxi -iz
Network:   Card: NVIDIA MCP77 Ethernet driver: forcedeth
           IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
           WAN IP: <filter>
           IF: eth0 ip-v4: <filter> ip-v6-link: N/A

<filter>は、WAN IP、IPv4、MACアドレスなどが表示される場所です

0
Terrance

ipを使用してください!

ip addr show

次に、関連するアダプタ(loではなく、通常eth0ではない)を探し、inetの近くのIPアドレスを見つけます。

0
Eliran Malka