2017-02-07 17 views
0

Javaプロジェクトでは、Webサイトの一意の識別子としてユーザーのIPアドレスを使用します。ユーザーがIPv4アドレスしか持っていない場合は、すべて正常に動作します。JavaにIPv4のIPv6アドレスを報告するようにする

しかし、私の問題は、ユーザーがIPv6アドレスを持っている場合、JavaがIPv4アドレスを報告し、ブラウザがIPv6アドレスを報告する(PHPの$ _SERVER ['REMOTE_ADDR']呼び出しで)ということです。

どのようにしてJavaのIPv6アドレスがIPv4であると報告するのですか?

編集:いくつかの明確化:

これは一人だけがファイルをダウンロードできるようにするために使用されます。複数の人が同じPCを使用するかどうかは重要ではありません。

ユーザーがhttp://whatismyipaddress.com/にクロムを送信すると、IPv6アドレスが表示されます。

しかし、今私はhttp://whatismyipaddress.com/を取得するためにJavaを使用すると、IPv4アドレスが表示されます。なぜこれがあり、どのようにしてChromeに表示されるIPv6アドレスを表示させることができますか?

編集2:私が使用するコード

public static String get(String url) throws WebFetchException { 
    String result = ""; 
    try { 
      URL url1 = new URL(url); 
      HttpsURLConnection urlConn = (HttpsURLConnection) url1.openConnection(); 
      urlConn.setConnectTimeout(8 * 1000); 
      urlConn.setRequestMethod("GET"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 
      String text; 
      while ((text = in.readLine()) != null) { 
       result = result + text; 
      } 
      in.close(); 
     } 
    } catch (Exception e) { 
     throw new WebFetchException("There was an exception while fetching the requested page: " + url); 
    } 
    return result; 
} 
+0

まず、IPアドレスは(完全に)固有の識別子ではありません。それがipv4かipv6かどうかは関係ありません。 「JavaがIPv4アドレスを報告する」とはどういう意味ですか? –

+0

あなたのスキームは、同じマシン上の複数のユーザーに対しては機能しません。 –

+0

どのようにipデータを取得しますか?特定のタイプを使用しますか?コードはありますか? –

答えて

1

識別子が間違っているように、IPアドレスを使用することができることを仮定。より多くのISPが何らかの形のNATを展開しているので、多くのユーザーがIPv4評価のプールを共有します。ユーザーが来ているアドレスはある接続から別の接続に変わる可能性があるので、安定したものに頼ることはできません。

一方、より多くのユーザーはIPv6を取得し、デバイスには複数のIPv6アドレスがあり、時間とともに変化します。

接続の問題のため、ユーザーはIPv4とIPv6の間で切り替えることもあります。まあ、ユーザーは気付かず、彼らのデバイスはちょうどそれを行うでしょう。

したがって、IPアドレスに依存するだけでは機能しません。

関連する問題