web-dev-qa-db-ja.com

自分の外部IPアドレスを調べるにはどうすればよいですか?

私のコンピューターはルーター/ファイアウォールの後ろに座っています。外部IPアドレスをプログラムで確認するにはどうすればよいですか。アドホッククエリには http://www.whatsmyip.org/ を使用できますが、TOSは自動チェックを許可しません。

何か案は?

40
Scott Weinstein

http://ipecho.net/plain は、whatismyip.comが自動リンクのメンバーシップを必要とするため、実行可能な代替手段のようです。 offering このサービスは無料で提供されているようですので、悪用しないでください。

46
Kevin L.

残念ながら、簡単な方法はありません。

www.whatsmyip.org のようなサイトを使用して、出力を解析します。

checkip.dyndns.com は、次のような非常に単純なHTMLファイルを返します。

<html>
  <head>
    <title>Current IP Check</title>
  </head>
  <body>
    Current IP Address: 84.151.156.163
  </body>
</html>

これは非常に簡単に解析できるはずです。さらに、このサイトは約10年間存在します。それがしばらくの間存在するという希望があります。

12

Modphpを使用してWebサーバーにアクセスできる場合、独自のロールを実行できます。

<?php print $_SERVER['REMOTE_ADDR']; ?>

悪用されたくない場合は、秘密にしておくか、リクエストの制限を追加する必要があります。

私は何年もサーバー上で使用しています。

明示的に:

Webサイトのpublic_htmlフォルダーにwhatismyip.phpというファイルを作成します。任意の名前で、Webルートのどこにでも配置できます。

上記の行を追加して、サーバーにクエリを実行します。

curl http://example.com/whatismyip.php

例えば。

11
guns
curl ifconfig.me

または

curl ifconfig.me/ip

Curlがインストールされていない場合、

wget ifconfig.me/ip 2>/dev/null && cat ip

お役に立てれば。

3
ShellFish

http://myexternalip.com は、この種の情報を提供します。 IPを取得するには、多くのオプションがあります。

2
akira

この質問はしばらく前に聞かれたので、プログラムでIPアドレスを判別できるように特別に設計された、自由に利用できるWebサービスがあります。これは ipify と呼ばれます。

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

結果

{"ip": "1.2.3.4" /* your public IP */}
2
atroberts20

背後のルーターがUPnPを使用している場合、開発中の言語に関係なくUPnPライブラリを使用して、外部IPをルーターに照会できます。

2
Eld

私のWRT54Gルーターは、そのローカルルーターアクセス機能(http(s)管理インターフェイス)を通じて教えてくれます。他の多くのデバイスでも同様のことができると思います。この場合、エントリページは、このフレーズを含む4行でIPv4アドレスのオクテットを示します。

class = num maxLength = 3 size = 3 value = 'i' name = 'wan_ipaddr _[〜#〜] n [〜#〜]' id = 'wan_ipaddr _-- [〜#〜] n [〜#〜] '

ここで、iはオクテット値であり、[〜#〜] n [〜#〜]はオクテット番号です。 doggerelのこのビットは、cygwinの好意により、フェッチして解析します。

#! /usr/bin/env Perl
use strict;
use warnings 'all';

my( $account, $password ) = @ARGV;

open QUERY,
    "curl --sslv3 --user '$account:$password' https://Linksys/ --silent |"
    or die "Failed to connect to router";

my @ipaddr = ('x','x','x','x');

while( <QUERY> ) {
    $ipaddr[$2] = $1 if /value='(\d+)' name='wan_ipaddr_([0-3])/;
}
close QUERY;
print join('.', @ipaddr);

これがすべてのバージョンのルーターファームウェアで機能するという保証はありません。

このインターフェースでhttpを使用するようにルーターが設定されている場合は、-sslv3 curlオプションをドロップします。ドット付き10進表記を使用してルーターをアドレス指定できます。上記のcurlオプションでhttpsを使用するには、次のことも行いました。

  1. ブラウザを使用して、ルーターの自己署名証明書(Linksys.crtとして保存)を取得しました。

  2. CAバンドルに追加しました:

    openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
    
  3. ルーターのアドレスのエイリアスとして、「Linksys」をホストファイル(Win8ボックスのC:\ Windows\System32\Drivers\etc\HOSTS)に追加しました。このエイリアスの代わりにcurlにドット付き10進表記が与えられている場合、証明書のサブジェクト名の不一致のために接続を拒否します。

または、--insecureオプションを使用して証明書の検証をバイパスすることもできますが、これはおそらく状況によってはより意味があります。

1
sdenham

別の方法は、クラウドメール(yahoo、google、hotmail)にアクセスできる場合、自分にメールを送信することです。次に、ヘッダーを表示すると、そこにIPアドレスが表示されます。

正確なエリアを検索しますが、ヘッダーは実装ごとに異なる場合があります。

編集:これは、プログラムによるアプローチではなく、IPアドレスを見つける方法に答えます

1
Wayne

whatismyip.comまたはipchicken.comは非常に簡単に解析できます。

ウェブホストまたはvpsがある場合は、ランダムにダウンして動けなくなることを恐れずに判断することもできます。

0
whatsisname