google で確認すると、パブリックIPを確認できます。 Ubuntuのコマンドラインに同じ答えが得られるものがありますか?
ルーターの後ろにいない場合は、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
外部IPを見つけるには、外部Webベースのサービスを使用するか、システムベースの方法を使用します。より簡単な方法は外部サービスを使用することです。また、ifconfig
ベースのソリューションは、NAT
の背後にいない場合にのみシステムで動作します。 2つの方法については、以下で詳しく説明します。
最も簡単な方法は、コマンドラインブラウザーまたはダウンロードツールを介して外部サービスを使用することです。 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ヘッダーに依存してサーバーがプレーンテキストで応答するようにします。また、非常に頻繁に変更されます(下に行く、名前を変更する、広告を表示する、出力形式を変更するなど)。
- DNS応答プロトコルは標準化されています(形式は互換性を維持します)。
- 歴史的に、DNSサービス(OpenDNS、Google Public DNSなど)は、今日流行している新しいwhatismyip.com HTTPサービスよりもずっと長く生き残る傾向があり、安定性、拡張性が高く、一般的に管理されています。
- (マイクロ最適化を重視するオタクの場合)、このメソッドは本質的に高速である必要があります(数マイクロ秒だけ)。
リゾルバとしてOpenDNSでDigを使用する:
$ Dig +short myip.opendns.com @resolver1.opendns.com
111.222.333.444
からコピー:https://unix.stackexchange.com/a/81699/14497
端末に次のように入力します。
$ 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.1
ppp0: 111.222.333.444
N.B:出力は指標であり、実際のものではありません。
礼儀:https://www.if-not-true-then-false.com/2010/linux-get-ip-アドレス/
UPDATE
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.me
curl v4.ident.me
curl v6.ident.me
HTTP要求の代わりにDNS要求を使用して、パブリックIPを見つけることができます。
$ Dig +short myip.opendns.com @resolver1.opendns.com
resolver1.opendns.com
dnsサーバーを使用して、魔法のmyip.opendns.com
ホスト名をyour ipアドレスに解決します。
Amazon AWS
curl http://checkip.amazonaws.com
サンプル出力:
123.123.123.123
私はそれが好きです:
私が使用しているものは:
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要求が手動で送信され、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
もう1つの高速(比較的高速かもしれません)
curl ipecho.net/plain
このため、 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サーバーに送信し、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/'
エコーは、Cookie 0xc00ceeおよびWiresharkから貼り付けられたものを含む、長さ8(0x0008)のバイナリSTUN要求(0x0001はBinding Requestを示します)を定義します。外部IPを表す4バイトのみが回答から取得され、クリーニングおよび印刷されます。
動作しますが、実稼働での使用は推奨されません:-)
追伸SIPおよびWebRTCのコアテクノロジーであるため、多くのSTUNサーバーが利用可能です。 Mozillaのいずれかを使用することはプライバシーに関して安全であるはずですが、別の方法を使用することもできます。 STUNサーバーリスト
私はこのためにtelnetで愚かなサービスを提供しています。このようなもの:
telnet myip.gelma.net
Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx
気軽に使用してください。
curl
、wget
なしで、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
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コンポーネントはサイレントを意味します(つまり、カール進行情報を表示しません)。
Ipogre.comでcURLを使用します(IPv4およびIPv6がサポートされています)。
IPv4
curl ipv4.ipogre.com
IPv6
curl ipv6.ipogre.com
ルーターにログインアクセスできるユーザーにとって、スクリプトを使用して、ルーターの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リクエストを決定することをお勧めします。
ifconfig
または短い出力の場合:
ifconfig | grep inet
また
ip addr show
そしておそらく:
hostname -I
wget http://smart-ip.net/myip -O - -q ; echo
N.B。curl
のインストールを気にしない場合、これも:
curl http://smart-ip.net/myip
Ubuntuタイプにlynxをインストールした場合
lynx bot.whatismyipaddress.com
多くのホームルーターは、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}\>'
私は少し遅れているかもしれませんが、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アドレスなどが表示される場所です
ip
を使用してください!
ip addr show
次に、関連するアダプタ(lo
ではなく、通常eth0
ではない)を探し、inet
の近くのIPアドレスを見つけます。