私がチェックした場合 グーグル、私は私の公開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
礼儀:
- https://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html
- https://ipecho.net/plain
また、次のように使用できます lynx
(ブラウザ)または curl
の代わりに wget
上記のコマンドにマイナーなバリエーションで、あなたの外部ipを見つけるために。
を使用して curl
ipを見つけるには:
$ curl https://ipecho.net/plain
より良いフォーマットされた出力の使用のために:
$ curl https://ipecho.net/plain ; echo
を使用したより高速な(おそらく最速の)方法 dig
と OpenDNS
リゾルバとして:
ここでの他の答えはすべてHTTP経由でリモートサーバーに行きます。 そのうちのいくつかは、出力の解析を必要とするか、サーバーがプレーンテキストで応答するようにUser-Agentヘッダーに依存しています。 彼らはまた、非常に頻繁に変更(ダウンして、自分の名前を変更し、広告を掲載し、出力形式などを変更する可能性があります。).
- DNS応答プロトコルは標準化されています(形式は互換性を維持します)。
- 歴史的にDNSサービス(OpenDNS、Google Public DNS、。.)はるかに長く生き残る傾向があり、より安定しており、スケーラブルであり、一般的にどのような新しいヒップよりも世話をされていますwhatismyip.com HTTPサービスは、今日は暑いです。
- (マイクロ最適化を気にそれらのオタクのために)、この方法は、(それだけで数マイクロ秒であること)本質的に高速でなければなりません。
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/
更新
-
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 80
EnterGET /plain HTTP/1.1
EnterHOST: ipecho.net
EnterBROWSER: web-kit
Enter
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
, hexdump
と 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/'
エコーは、cookie0xc00ceeとwiresharkから貼り付けられたものを持つ長さ8(0x0008)のバイナリSTUN要求(0x0001はバインディング要求を示します)を定義します。 外部IPを表す四つのバイトだけが答えから取られ、きれいにされ、印刷されます。
動作していますが、生産用には推奨されません:-)
P.S.SIPおよびWebRTCのコア技術であるため、多くのSTUNサーバーが利用可能です。 Mozillaのものを使用することはプライバシー上安全ですが、別のものを使用することもできます: STUNサーバーリスト
「動的IPを持つ」、「インターネットを介して他のシステムを使用するSSH」、「現在のパブリックIPを表示するコマンド」。 あなたはここで鶏/卵の問題を見ますか? アドレスを知らずにリモートサーバーでコマンドを実行するにはどうすればよいですか? 次のようなサービスに興味があるかもしれませんno-ip.com /DynDNS.org…
たぶんこれは別の質問になるはずですが、私のパブリック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
で実行するだけです