ifconfigまたはhostname -iコマンドを使用してIPアドレスを見つけることができます。
しかし、パブリックIPを見つけるにはどうすればよいですか?
(私は静的なパブリックIPを持っていますが、unixコマンドを使用してそれを見つけたいです)
ifconfigまたはhostname -iコマンドを使用してIPアドレスを見つけることができます。
しかし、パブリックIPを見つけるにはどうすればよいですか?
(私は静的なパブリックIPを持っていますが、unixコマンドを使用してそれを見つけたいです)
回答:
curl ifconfig.me
curl ifconfig.me/ip
(IPのみ)
curl ifconfig.me/all
(詳細については、時間がかかります)
その他のコマンドについては、http://ifconfig.me/#cli_wrapをご覧ください。
curl http://checkip.amazonaws.com/
リクエストできmyip.opendns.com
ます。OpenDNSから。 dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
。またはWindows上:nslookup myip.opendns.com resolver1.opendns.com
。
dig @208.67.222.220 myip.opendns.com +short
うまくいったのは、答え全体を調べることなく直接IPを取得するためです。
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
注上記のみこれらのレゾルバのIPv4の現在(なしのために働くことも、現在、IPv6を持っているように見えるが、あなたは省略する-4
と、明示的な-t a
、あなたは、Googleのを除いて(それが将来的に破壊する危険性がtxt
、ためているかもしれないが、実際に仕事をIPv6が1日、Googleによって適切に有効化されている場合))。
myip.opendns.com
はを通じてのみ解決可能resolver1.opendns.com
であり、そうではないことに注意してください。auth1.opendns.com
したがって、彼らはDNSハイジャックと自分のドメイン名の中間者をやっているようです!したがって、resolver1.opendns.com
に対して権限がないため、これを使用してランダムリゾルバのIPを見つけることはできませんmyip.opendns.com
。
o-o.myaddr.l.google.com
最も柔軟で将来性のあるアプローチのように見えることに注意してください。DNSリゾルバーがクライアントサブネットの試験的なEDNS0拡張機能をサポートしているかどうかをテストするのにも役立ちます(ほとんどのリゾルバーがサポートしていない)。
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
。
-4
か-6
どうかが必要です。
このためにシンプルで高速なWebサービスを作成しました。
curl ident.me
IPv4を要求できます:
curl v4.ident.me
またはIPv6:
curl v6.ident.me
APIはhttp://api.ident.me/に文書化されています
1つの方法:http : //www.whatismyip.com/
もし
次に、インターフェイスのIPアドレス(「inet addr:」部分)のifconfigからの出力を解析して、すべてのインターフェイスのIPアドレスのリストを取得できます。プライベート範囲にない1つのIPアドレス(http://en.wikipedia.org/wiki/IP_address#IPv4_private_addressesを参照)は、パブリックIPアドレスです。
同じリストは次の方法でも取得できます
ip addr show
解析しやすいかもしれません。
インターネットに直接接続していない場合(NATなど)、外部からの助けがなければパブリックIPアドレスを見つける方法はありません(コンピューターが認識していないため)。その後、他の回答のように行う必要があります。
NATトラバーサル用に設計されたSTUNプロトコルを使用して、少し異なるアプローチを取りました。Ubuntuを使用している場合は、次のように入力してパッケージ「stun」をインストールできます。
sudo apt-get install stun
パッケージには、おそらく必要のないSTUNサーバーがインストールされますが、この問題を解決するために使用したSTUNテストクライアントも付属しています。これで、1つの(それほど単純ではない)コマンドでパブリックIPを取得できます。
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
ここで、stunはパブリックSTUNサーバー "stunserver.org"に接続し、パブリックIPで応答を返します。残りのコマンドは、出力からIPを除外するだけです。
text/html
その擬似APIが返すものには問題ありません-確かにXMLやJSONではありません。text/plain
多分、しかしそれはとして完全に使用可能text/html
です。
wget -q -O - http://wgetip.com/
GoogleがパブリックIPアドレスを表示するようになりました:http : //www.google.com/search?q= ip
User-Agent
、ページに提供される文字列に基づいてIPアドレスのみを表示します。Firefoxでは、動作します。しかし、「Firefox」文字列を無効にしたSeaMonkeyは(「general.useragent.compatMode.firefox」をfalseに設定して)、突然無効になります。SeaMonkeyを含む同等の互換性を備えたGeckoベースのデスクトップブラウザーは他にも多数あるため、GoogleがGeckoだけでなくFirefoxに対してのみこのような機能を明示的に有効にする理由はまったくわかりません。
最も簡単な方法は、提案されているようにhttp://ifconfig.me/を使用することです。
このページでは、取得する情報にどのコマンドを使用するかがわかります。
IPの場合:
curl ifconfig.meまたは
curl ifconfig.me/ip
公開ホスト名の場合:
curl ifconfig.me/host
XMLファイルのすべての情報:
curl ifconfig.me/all.xml
など... http://ifconfig.meをチェックしてください
私はこれを非常に多くのデバイスから行っていますので、サーバー上で独自の2つのサービスを作成しました:
Webサーバーのルートにあるphpファイル:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
シェルでの使用:
$ curl -4 mydomain.com
79.22.192.12
ipv6でも動作します:
$ curl mydomain.com
2a01:e34:ee7d:180::3
netcatの場合:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Ciscoルーターの場合:
router#more http://myserver.com/index.php
79.22.192.12
カスタムtelnetサーバーを使用したクイックハック:xinetdが/ usr / bin / envを生成:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
そして、それへのtelnet:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
ルーターでも同じように機能します。
router#telnet myserver.com
79.22.192.12
このように、NATまたはプロキシが通信に関与していて、表示されるIPから知りたい場合、内部ネットワークで動作させることができます。
サードパーティのサービスは必要ありません。
外部ソースに依存することを避けるために、期待を使用してルーターにtelnetを実行し、そのパブリックインターフェイスのIPアドレスを取得します。次に、スクリプトの例を示します。
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
次に、上記のスクリプトを次のように実行して、パブリックIPを取得します。
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
もちろん、これは、ルーターと、configconfigコマンドが利用可能なLinuxベースのルーターへの管理者アクセス権があるという前提に基づいています。
他の多くの質問の重複(そのため私の-1票)。
簡単なシェルスクリプトソリューションは次の場所にあります。
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Linux、FreeBSD、SunOS、およびApple Darwinで動作します(わずかな変更が加えられています)。
シェルだけを使用して外部IPを確認し、外部プロバイダーも使用できます。
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
出力
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]。* \。[0-9]。* \。[0-9]。* \。[0-9]。*' -m1
ここに、消え去るかフォーマットを変更するかもしれない「公共サービス」サイトではなく、動的IPの管理に関してビジネスが解決するホストに依存する別の選択肢があります。
1)多くの無料の動的DNSサービス(no-ip.comなど)のいずれかにサーバーを登録します。これにより、xxx.no-ip.orgのようなDNSエントリが得られます。
2)サービスの動的更新ツールをインストールします(IPの変更をサービスに報告します)。
スクリプトでIPアドレスを取得するには、次のようにします。
$external_ip = `dig +short xxx.no-ip.org`
ダイナミックIPが変更され、いくつかの構成エントリを変更する必要があるかどうかを確認するために、cronジョブで使用するのに最適です。
OS Xには、プライベートIPとパブリックIPの両方を取得する2つの簡単なソリューションがあります(LaunchBarを使用する場合はボーナスコード付き)。
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"