web-dev-qa-db-ja.com

Java HttpServletRequestでクライアントIPアドレスを取得する方法

クライアントのIPアドレスを取得する必要があるJava Webアプリケーション(サーブレット)を開発しようとしています。

私はstackoverflowで利用可能なすべての可能な答えを試したので、これを重複した質問とみなさないでください。

以下はこれまでの私のコードです:

1)

String ipAddress =  request.getRemoteAddr();

この場合、ほとんどの本は「デフォルトゲートウェイアドレス」(147.120.1.5)を取得します。私のマシンのIPアドレス(174.120.100.17)ではありません。

2)

String ipAddress = request.getHeader("X-FORWARDED-FOR");  
   if (ipAddress == null) {  
       ipAddress = request.getRemoteAddr();  
   } 

この場合、ほとんどの本は「デフォルトゲートウェイアドレス」(147.120.1.5)を取得します。私のマシンのIPアドレス(174.120.100.17)ではありません。

InetAddress IP=InetAddress.getLocalHost();
System.out.println(IP.getHostAddress());

この場合、サーバーのIPアドレス(147.120.20.1)を取得しました。

147.120.100.17のIPアドレス。実際のクライアントIPアドレスを取得する方法がわかりません。答えてください。

どうもありがとうございました。

19
Samith Dilshan

これを試して、

    String ipAddress = request.getHeader("X-FORWARDED-FOR");  
       if (ipAddress == null) {  
         ipAddress = request.getRemoteAddr();  
   }

参照: http://www.mkyong.com/Java/how-to-get-client-ip-address-in-Java/

46
gihan

これを試してください。すべての条件について

  private static final String[] HEADERS_TO_TRY = {
            "X-Forwarded-For",
            "Proxy-Client-IP",
            "WL-Proxy-Client-IP",
            "HTTP_X_FORWARDED_FOR",
            "HTTP_X_FORWARDED",
            "HTTP_X_CLUSTER_CLIENT_IP",
            "HTTP_CLIENT_IP",
            "HTTP_FORWARDED_FOR",
            "HTTP_FORWARDED",
            "HTTP_VIA",
            "REMOTE_ADDR"};

    private String getClientIpAddress(HttpServletRequest request) {
        for (String header : HEADERS_TO_TRY) {
            String ip = request.getHeader(header);
            if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
                return ip;
            }
        }
        return request.getRemoteAddr();
    }
5
elaheh aghaee

場合には、Dev-environmentのIPアドレスを取得しようとしているので、これを使用できます。

_public String processRegistrationForm(HttpServletRequest request)
{
    String appUrl = request.getScheme() + "://"+ request.getLocalAddr();
    return appUrl;
}
_

request.getLocalAddr()は、リクエスト受信システムのIPアドレスを返します。

それが役に立てば幸い。

1
Partha Mondal
 import Java.net.UnknownHostException;

/**
 * Simple Java program to find IP Address of localhost. This program uses
 * InetAddress from Java.net package to find IP address.
 *
 */
public class IPTest { 

public static void main(String args[]) throws UnknownHostException {

    InetAddress addr = InetAddress.getLocalHost();

    //Getting IPAddress of localhost - getHostAddress return IP Address
    // in textual format
    String ipAddress = addr.getHostAddress();

    System.out.println("IP address of localhost from Java Program: " + ipAddress);

    //Hostname
    String hostname = addr.getHostName();
    System.out.println("Name of hostname : " + hostname);     
}
}

出力:

IP address of localhost from Java Program: 190.12.209.123
Name of hostname : PCLOND3433
0
bhargav