0

localhost でホストされているマシンでホストされている jsp Web アプリケーションがあります。

LAN 上の別のマシンからこの Web アプリケーションにアクセスできます。ここで行っているのは、Web アプリにアクセスするマシンの IP を返すメソッドを持つ Bean クラスを作成したことです。しかし、別のマシンからアクセスしていたときに、ホストされているマシン自体の IP を取得しました。なぜそれが起こるのか誰にもわかりますか?ローカル ホストでホストされている Web アプリにアクセスする別のマシンの IP を取得する方法を教えてください。

4

3 に答える 3

0

確実にそうすることはできませんが、すべてのクライアントとサーバー間のネットワークを制御でき、悪意のあるリクエストが誤った情報を提供する可能性があることを受け入れる場合は、ServletRequest.getRemoteAddr()などのメソッドを利用できます。そんな情報を教えてくれます。繰り返しますが、最初にリクエストを送信したマシンのアドレスであることが保証されているわけではなく、何らかの方法で本物であることが保証されています。ネットワークの状態が正しい (または間違っている) 場合、その情報は簡単に偽装できます。

于 2013-01-28T06:36:34.927 に答える
0

これは、Web サービスを使用して IP アドレスを取得しています。

package ipInfo;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class ExternalIp {
    private static String URL = "http://api-sth01.exip.org/?call=ip";

    public static void main(String[] args) {
        ExternalIp ipGetter = new ExternalIp();
        ipGetter.getExternalIp();
    }

    public void getExternalIp() 
    {
        BufferedReader reader = null;
        String line = "";
        int tries = 0;
        do {    
            try {
                reader = read(URL);
                /*while(reader.readLine() != null)
                {
                    line = line + reader.readLine();
                }*/
                line = reader.readLine();
            }
            catch (FileNotFoundException fne) {
                System.out.println("File not found for url: " + URL);
                System.out.println("Check your typing");
                System.out.println();
                return;
            }
            catch (IOException ioe) {
                System.out.println("Got IO Exception, tries = " + (tries + 1));
                System.out.println("Message: " + ioe.getMessage());
                tries++;
                try {
                    Thread.currentThread().sleep(300000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
                continue;
            }   
            catch (Exception exc) {
                exc.printStackTrace();
            }
        } while (reader == null && tries < 5);

        if (line != null && line.length() > 0) {
            System.out.println("Your external ip address is: " + line);
        }
        else {
            System.out.println("Sorry, couldn't get your ip address");
        }
    }

    public BufferedReader read(String url) throws Exception{
        return new BufferedReader(
            new InputStreamReader(
                new URL(url).openStream()));
    }

}
于 2013-01-28T06:39:57.867 に答える