私の公開IPを決定するためのコマンド?

私がチェックした場合 グーグル、私は私の公開IPを見ることができます。 Ubuntuのコマンドラインに同じ答えが得られるものはありますか?

あなたがルータの後ろにいない場合は、次のようにしてそれを見つけることができます ifconfig.

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

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

またはより短い

curl https://ipinfo.io/ip

外部ipを検索するには、外部webベースのサービスを使用するか、システムベースの方法を使用できます。 より簡単なのは、外部サービスを使用することです。 ifconfig ベースのソリューションは、あなたが背後にいない場合にのみ、システムで動作します NAT. 二つの方法は、以下で詳細に議論されてきた。

外部サービスを使用した外部IPの検索

最も簡単な方法は、コマンドラインブラウザまたはダウンロードツールを介して外部サービスを使用することです。 以来、 wget Ubuntuではデフォルトで利用可能ですが、それを使用できます。
Ipを検索するには、次を使用します-

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

礼儀:

また、次のように使用できます lynx(ブラウザ)または curl の代わりに wget 上記のコマンドにマイナーなバリエーションで、あなたの外部ipを見つけるために。

を使用して curl ipを見つけるには:

$ curl https://ipecho.net/plain

より良いフォーマットされた出力の使用のために:

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

を使用したより高速な(おそらく最速の)方法 digOpenDNS リゾルバとして:

ここでの他の答えはすべてHTTP経由でリモートサーバーに行きます。 そのうちのいくつかは、出力の解析を必要とするか、サーバーがプレーンテキストで応答するようにUser-Agentヘッダーに依存しています。 彼らはまた、非常に頻繁に変更(ダウンして、自分の名前を変更し、広告を掲載し、出力形式などを変更する可能性があります。).

  1. DNS応答プロトコルは標準化されています(形式は互換性を維持します)。
  2. 歴史的にDNSサービス(OpenDNS、Google Public DNS、。.)はるかに長く生き残る傾向があり、より安定しており、スケーラブルであり、一般的にどのような新しいヒップよりも世話をされていますwhatismyip.com HTTPサービスは、今日は暑いです。
  3. (マイクロ最適化を気にそれらのオタクのために)、この方法は、(それだけで数マイクロ秒であること)本質的に高速でなければなりません。

ResolverとしてOpenDNSでdigを使用する:

$ dig +short myip.opendns.com @resolver1.opendns.com111.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> あなたの実際のインターフェイスの名前を使って、例えば: eth0, eth1, pp0、等。..

使用例:

$ 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.1ppp0: 111.222.333.444

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

礼儀: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

更新

  1. LANG=c に追加されました ifconfig ロケールの設定に関係なく、常に英語の出力を与えるように、使用法に基づいています。

私のお気に入りはいつもされています :

curl ifconfig.me

簡単、タイプすること容易。

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

もしifconfig.me がダウンしていて、icanhazip.com およびまたはipecho.net

curl icanhazip.com

または

curl ipecho.net

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

curl icanhazip.com

Ipv4を明示的に要求できます:

curl ipv4.icanhazip.com

あなたが持っていない場合 curl あなたが使用することができます wget 代わりに:

wget -qO- icanhazip.com

私はすべてが迷惑で遅いことがわかったので、私は自分自身を書いた。 それはシンプルで高速です。

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

例:

curl ident.mecurl v4.ident.mecurl v6.ident.me

技術的な設計:DNSでは、ident.me AとAAAAの両方のレコードを持っています,v4.ident.me aレコードしか持っていないし、v6.ident.me AAAAレコードしか持っていません。 これらのIp上のポート443と80はnginxによって提供され、SSLはnginxによって提供される証明書を使用しますletsencrypt.org certbotを介して、および次の構成(抜粋):

server {  […]  server_name .ident.me;  location / {    default_type text/plain;    return 200 $remote_addr;    add_header Access-Control-Allow-Origin "*";    add_header Cache-Control "no-cache, no-store, must-revalidate";  }}

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

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

それは使用します resolver1.opendns.com 魔法を解決するためのdnsサーバー myip.opendns.com にホスト名を指定します あなたの ipアドレス。

Amazon AWS

curl https://checkip.amazonaws.com

サンプル出力:

123.123.123.123

また、ブラウザ上で動作します: http://checkip.amazonaws.com

私はそれが好きなので:

  • 返信本文には平文のIPだけが返されますが、それ以外は何も返されません
  • これは、いつでもすぐにオフラインになる可能性は低いよく知られているプロバ

私が使っているのは :

wget -O - -q icanhazip.com

はい、あなたはipを持つことができます:-)

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

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

これは手動でHTTP要求を送信し、IPをaの一番下に返します HTTP/1.1 200 OK reply

出力例:

$ telnet ipecho.net 80Trying 146.255.36.1...Connected to ipecho.net.Escape character is '^]'.GET /plain HTTP/1.1HOST: ipecho.netBROWSER: web-kitHTTP/1.1 200 OKDate: Tue, 02 Jul 2013 07:11:42 GMTServer: ApacheExpires: Mon, 26 Jul 1997 05:00:00 GMTCache-Control: no-cachePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/htmlf111.222.333.4440

このために, スタン 発明された。 クライアントとして、公開されているSTUNサーバーに要求を送信し、表示されているIPアドレスを返すことができます。 低レベルのようなものwhatismyip.com それはHTTPとスマートに細工されたDNSサーバーを使用していないが、驚くほど高速なSTUNプロトコルを使用してい

を使用して stunclient

あなたが持っている場合 stunclient インストール済み(apt-get install stuntman-client debian/ubuntuでは)あなたは単に行うことができます:

$stunclient stun.services.mozilla.comBinding test: successLocal address: A.B.C.D:42541Mapped address: W.X.Y.Z:42541

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

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

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

を使用して bash

STUN要求は、以下を使用して外部STUNサーバーに送信することができます netcat そして使用して後処理されて下さい dd, hexdumpsed そうのように:

$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/'

エコーは、cookie0xc00ceeとwiresharkから貼り付けられたものを持つ長さ8(0x0008)のバイナリSTUN要求(0x0001はバインディング要求を示します)を定義します。 外部IPを表す四つのバイトだけが答えから取られ、きれいにされ、印刷されます。

動作していますが、生産用には推奨されません:-)

P.S.SIPおよびWebRTCのコア技術であるため、多くのSTUNサーバーが利用可能です。 Mozillaのものを使用することはプライバシー上安全ですが、別のものを使用することもできます: STUNサーバーリスト

「動的IPを持つ」、「インターネットを介して他のシステムを使用するSSH」、「現在のパブリックIPを表示するコマンド」。 あなたはここで鶏/卵の問題を見ますか? アドレスを知らずにリモートサーバーでコマンドを実行するにはどうすればよいですか? 次のようなサービスに興味があるかもしれませんno-ip.com /DynDNS.org…

PS ip at DuckDuckGo (コマンドラインはありませんが、兄Gもありません)

たぶんこれは別の質問になるはずですが、私のパブリックIPアドレスが変更されたときに警告を表示したいと思います。 今のところ、私はちょうどnotify-sendを使ってcrontabで次の答えを使用しています。

私の友人の公開IPを知らずにSSHを実行することはできません。… dynDNSは多くの費用がかかり、no-ipタフな作品が、状況はそれを許可していません。… とにかく質問はすでに答えられています。. あなたの提案をありがとう

以下の偉大な解決策。 Centosの場合は、ifconfig eth1|sed-nre'/[[[]+/{N;s/[([[]+)を使用します。*inet*([^]+).*/\2/p}"ここで、eth1は関心のあるネットワークデバイスです。'et1'文字列を省略して、すべてのアダプタのすべてのipを表示できます。 '\2の代わりに’\1\2`と書いて各アダプタの名前を表示することもできます。

答えのどれも正しいアプローチを示していません。 私は答えを投稿するのに十分な評判を持っていないので、私は外部サービスに頼らずにそれを得る方法についてのコメントを投稿します。 ターミナルhostname hostname--ip-addressで実行するだけです