3

インターネットから見たネットワークの IP アドレスをプログラムで取得するにはどうすればよいですか? これは明らかに、ルーターが ISP に接続するときにアクセスできるプロパティです。標準プロトコルを使用してルーターからこの情報を取得する方法はありますか? 私の唯一の他のオプションは、私の IP アドレスを返す WS を見つけること (驚くほど難しいこと) か、whatismyip.comのようなものにアクセスして、すべての HTML を削除することです (非常に汚れていて、変更されやすい)。他に方法はありますか???

4

4 に答える 4

8

whatismyip.com をスクレイピングしないでください。アドレスを返すだけの API を呼び出す方法については、こちらを参照してください。

これを使用しない場合は、そのようなものを自分で作成する必要があります。つまり、見かけのアドレスを報告できるルーターの先のホストです。

次の理由により、Web サーバーが実際の WAN IP アドレスを認識しない場合があることに注意してください。

  • ISP が HTTP トラフィックを透過的にプロキシしている可能性があり、サーバーはプロキシの IP を認識します。その場合、通常はX-Forwarded-Forヘッダーを探して解析する必要があります 。

  • または、Olaf が指摘したように、あなたと広く開かれたインターネットの間に別の NAT ルーターがある可能性があります。つまり、あなたのルーターの WAN アドレスはプライベート ネットワーク上にあります。whatismyip.com のようなサービスから得られる最高のものは、最も外側の NAT ルーターの IP です。

于 2008-10-07T06:53:12.063 に答える
2

ルーターがsnmpをサポートしている場合、それを使用して外部IPについて尋ねることができます。小さな例がここにあります:

http://www.rohitab.com/discuss/index.php?showtopic=31901

于 2008-10-07T06:59:29.993 に答える
2

ポール・ディクソンの回答は完全に見えたので投票しましたが、これにはもう1つの側面があります。

  • ご利用の ISP がプライベート アドレスを提供している場合があります。これ一部の ISP で発生します。期待するものによっては、持っていないルーティング可能なアドレスが必要になる場合があります
  • Paul が言及しているプロキシ情報 (HTTP-Header X-Forwarded-For) は、プロキシを使用している場合、ルーティングできないアドレスである可能性があります。
  • これらすべての側面 (ISP からルーティング不可能なアドレスを取得し、自分でプロキシを使用する) を組み合わせると、奇妙な結果が得られる可能性があります。

これらの側面は一般的な日常の状況ではありませんが、ニーズによってはこれらを考慮に入れる必要がある場合があります。

于 2008-10-07T07:18:47.923 に答える
1

言語仕様は表示されませんが、ここで Python で実行しました: Finding a publicfacing IP address in Python?
基本的に、外部サーバーに依存せずにそれを行う方法はありません。この場合、IP アドレスのみを提供するhttp://www.whatismyip.com/automation/n09230945.aspを使用します。または、PHP で次のような独自のスクリプトを使用することもできます。

<?php
echo $_SERVER['REMOTE_ADDR'];
?>
于 2008-10-07T06:52:25.060 に答える