41

インストールスクリプトの一部として、マシンのパブリックIPアドレスについて「知識に基づいた推測」を行いたいと思います。さまざまなホストやプラットフォームで動作し、可能な限り堅牢である必要があります。次に例を示します。

https://gist.github.com/4669037

このスクリプトは3つのメソッドを使用し、デフォルトで値が。になります/etc/hostname。私はこれまでUbuntuでこれをテストしただけです。これは他のディストリビューションでも機能する可能性がありますか?そして、私が追加できる追加のメソッドはありますか?

4

12 に答える 12

83
curl ipinfo.io/ip

または

wget -q -O - ipinfo.io/ip

または

lynx -source ipinfo.io/ip

パブリックIPアドレスを取得する

于 2013-01-29T23:54:01.427 に答える
12

curl ifconfig.meカールがない場合は、次のようにしてください。

wget -qO- ifconfig.me/ip

于 2013-01-30T12:32:10.747 に答える
4

どのくらいのパブリックパブリックIPを探していますか?マシンがNATの背後にある場合はどうなりますか?

  • curl// wgetnetcat)リクエスターのアドレスが含まれていncます<URL>:ほとんどの場合機能するはずですが、サイトがマシンから到達できない可能性があります(ファイアウォールまたは一時的/永続的な利用不可)。可能な限り多くのパブリックIPを取得します。

  • ifconfig:rootとして実行する必要があります。そうでない場合は、/sbin/ifconfigまたは/usr/sbin/ifconfig同様に実行する必要があります。マシンにさらにNICがある場合はどうなりますか?どのIPが正しいかをどのように判断しますか?マシンのLANでIPv6のみが使用されている場合はどうなりますか?いずれにせよ、取得できるパブリックIPは最小限になります(マシンにさらに多くのインターフェイスが構成されている場合は、間違ったIPになる可能性があります。これは、ネットワークタップデバイスを使用した遍在する仮想化などでよくあることです)。

  • /etc/hostname:存在する必要はありません。多くのシステムでは存在する必要があり/etc/HOSTNAME、IPアドレスは含まれていませんが、ホスト名(通常はFQDN)が含まれている必要があります。

重要なのは、失敗する可能性のある方法は多数あり、おそらくa)ターゲットとするシステムをより正確に指定するか、b)本当にIPを知る必要があるかどうかを検討する必要があるということです。少し複雑なセットアップで惨めに失敗したときに使用する価値のある単純なケースで動作しますか?IPが必要だと思われる場合は、IPをまったく取得しないか、間違ったIPを取得した場合に、障害を適切に処理する方法を準備してください。

于 2013-01-29T23:56:03.887 に答える
3

AWS EC2の場合、次を使用できます。

curl checkip.amazonaws.com

注:このサービスは、どのWebクライアントからでも使用できます。

于 2017-06-12T06:00:45.420 に答える
2

次のコマンドを試してください。

wget -O - -q icanhazip.com
于 2014-04-25T20:07:33.130 に答える
1

このソリューションは、NATなどの背後にいる場合は機能しません。サードパーティのサービスがなくても役立ちます。マシンにサーバーやppp接続などの接続がある場合に機能します。

  • 質問に対する正確な答えではありませんが、おそらく他の人(私のような)を助けます
  • ほとんど(またはすべて?)の場合、rootである必要があります

から(最初の)デフォルトルートを取得し、route -nそれが使用するインターフェイスを見つけ、それが持つIPを見つけることができます。

MAINIF=$( route -n | grep '^0\.0\.0\.0' | head -n 1 | awk '{print $NF}' )
IP=$( ifconfig $MAINIF | { IFS=' :';read r;read r r a r;echo $a; } )
于 2014-03-05T21:36:47.167 に答える
1

bashのみを使用する(icanhazip.comの助けを借りて):

exec 3<>/dev/tcp/icanhazip.com/80 
echo -e 'GET / HTTP/1.0\r\nhost: icanhazip.com\r\n\r' >&3 
while read i
do
 [ "$i" ] && myip="$i" 
done <&3 
echo "$myip"

bashはicanhazipへのソケットを開き、httpリクエストを送信します。IPアドレスは、返されたデータの最後の空でない行に返されます。(前の行はhttpヘッダーです)

これにより、wgetやcurlなどのhttpクライアントが不要になります。

于 2017-05-26T00:29:31.237 に答える
0

curlを使用して shtuff.itIPサービスをヒットします

curl http://shtuff.it/myip/short
于 2013-07-02T13:58:04.603 に答える
0

ipifyAPIを使用します。

curl 'https://api.ipify.org?format=json'

Bashスクリプト:

#!/bin/bash

ip=$(curl -s https://api.ipify.org)
echo "My public IP address is: $ip"
于 2016-07-28T07:37:31.843 に答える
0

覚えやすいのでIPGrabを使用しています。

curl http://ipgrab.io
于 2021-01-04T14:57:22.687 に答える
0

他のコマンドの最後に空白文字が表示されていました。

$ curl -s https://api.ipify.org
255.255.255.255%

jsonip.comをjqと組み合わせて使用​​すると、これがなくなることがわかりました。このように、IPアドレスの解析はjq式と同じくらい簡単です。

$ curl -s https://jsonip.com | jq -r '.ip'
255.255.255.255

このjqplayを参照してください。

于 2021-07-01T20:25:17.623 に答える
0

私はここで私の個人的な好みの方法を見つけました:</ p>

  • dig +short myip.opendns.com @resolver1.opendns.com
  • dig +short txt ch whoami.cloudflare @1.0.0.1
  • dig +short txt o-o.myaddr.l.google.com @ns1.google.com
    • dig +short txt o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{print $2}'
于 2022-02-28T01:56:16.587 に答える