外部IPを見つけるために使用できる* nixベースのコマンドは何ですか?


回答:



8
dig + short myip.opendns.com

これは、DNSサーバーとしてOpenDNSを使用している場合にのみ機能します。

そうでない場合は、次のいずれかが機能するはずです。

dig + short myip.opendns.com @ 208.67.222.222
dig + short myip.opendns.com @ 208.67.220.220
dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

1
MacOS 10.5、Ubuntu 8.04、またはUbuntu 9.04で動作しません。
ドリュースティーブンス

面白いのは、Ubuntu 8.10で動作することです。
ブラッドギルバート

おそらく、opendnを使用しているからでしょう。
ブラッドギルバート

(httpの代わりに)DNSを使用してIPを見つけるための+1。また、その名の例を使用してDNSサーバーを指定することができます@resolver1.opendns.com(読みやすくするため)
JFS



2

これを使用するにはOpenDNSサーバーを使用する必要があります...特定のDNSサーバーを次のような掘り出しで照会できます。

dig + short myip.opendns.com @ 208.67.222.222

2

curlを使用してwhatismyipのようなものからページを取得し、断片を取り出すことができます。この例ではwhatismyipaddress.comを使用しました...明らかに、フィールドはサービスによって異なります。

curl -s http://whatismyipaddress.com/ | grep LOOKUPADDRESS | awk '{ print $4 }'

1

インターネット上のどこかにtracerouteを実行して、ローカルネットワークからのホップを探します。

おそらくもっと良い方法がありますか?




0

ifconfigコマンドを使用して、すべてのインターフェースとそれらに関連付けられたIPアドレスをリストできます。

したがって、インターネットインターフェイスがppp0であることがわかっている場合は、次を実行できます。

$ ifconfig ppp0
ppp0リンクencap:Point-to-Pointプロトコル
          inet addr:XXXX.X PtP:YYYYマスク:255.255.255.255
          UPA POINTOPOINT RUNNING NOARP MULTICAST MTU:1444 Metric:1
          RXパケット:198986エラー:0ドロップ:0オーバーラン:0フレーム:0
          TXパケット:122929エラー:0ドロップ:0オーバーラン:0キャリア:0
          collisions:0 txqueuelen:3
          RXバイト:134195571(127.9 MiB)TXバイト:17101701(16.3 MiB)

XXXXがIPアドレスになります。YYYYはネクストホップのIPアドレスです。

次に、grep / awk / sed / cut / perl / whateverを使用してifconfigの出力を後処理して、IPのみを抽出できます。

iprouteツールをインストールしている場合は、ipコマンドを使用することもできます。例えば

$ ip addr list ppp0
21842:ppp0:mtu 1444 qdisc htb state UNKNOWN qlen 3
    リンク/ ppp
    inet XXXXピアYYYY / 32スコープグローバルppp0

それはおそらく読みやすく、確かに解析しやすいでしょう:

$ ip addr list ppp0 | awk '/ inet / {print $ 2}'
XXXX

-ifconfigのIPが実際のインターネットIPと一致しない可能性があります(biNATの場合)-FreeBSDにはiproute2パッケージがないため、ipコマンドは適用できません
SaveTheRbtz 09

本当です、私はNATを使用しないので、それは私には決して起こりませんでした....あなた自身のシステムについて問い合わせることができる情報のために外部サービスを使用することは私にとって「間違っている」ように見えました。NATを使用している場合でも、必要なときに利用できる場合と利用できない場合がある外部サービスに依存するよりも、NATを実行しているルーターに問い合わせる方法を(おそらくSNMPクエリを介して)見つけ出すことを好みます。
cas

@クレイグ、あなたのアプローチは問題ありません。ただし、外部からその値にアクセスできない限り、外部IPではありません。あなたはない、この答えのために、外部の点に依存する必要があります。アイデアは、クエリの信頼できる(少なくとも境界ポイント以上の)外部ポイントを見つけることです。OpenDNSは良い点です。
ニック

@nik:ボーダールーターのIPが外部IPではない唯一のケースは、NATの複数のレイヤーの背後にいる場合です...その場合、正しい解決策は、脳損傷のないサービスにできるだけ早く切り替えることです。また、IPを見つけるためにURLをフェッチする際の問題は、実際にそれをフェッチするホストのIPのみを通知することです。これは、Viaヘッダーを除去するプロキシの場合があります。
cas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.