2015-04-28 14 views
8

Tôi đang cố gắng phát triển một ứng dụng web Java (Servlet) mà tôi cần để lấy địa chỉ IP của khách hàng.Cách lấy địa chỉ IP của máy khách trong Java HttpServletRequest

Vui lòng không coi đây là câu hỏi trùng lặp vì tôi đã thử tất cả các câu trả lời có thể có trong luồng ngăn xếp.

Sau đây là mã của tôi cho đến nay:

1)

String ipAddress = request.getRemoteAddr(); 

Trong trường hợp này hầu hết các cuốn sách tôi nhận được 'cửa ngõ địa chỉ mặc định' (147.120.1.5). không phải địa chỉ ip máy của tôi (174.120.100.17).

2)

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

Trong trường hợp này hầu hết các cuốn sách tôi nhận được 'cửa ngõ địa chỉ mặc định' (147.120.1.5). không phải địa chỉ ip máy của tôi (174.120.100.17).

3)

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

Trong trường hợp này tôi có địa chỉ IP của máy chủ (147.120.20.1).

Địa chỉ IP của tôi ở 147.120.100.17. Tôi không biết cách nhận địa chỉ IP của khách hàng thực. Xin hãy trả lời.

Cảm ơn bạn rất nhiều.

+0

Không có cách nào chính xác để có được địa chỉ của khách hàng ip trừ khi khách hàng một cách rõ ràng gửi cho bạn –

+0

Có không phải cách để có được địa chỉ IP thực của khách hàng mà bạn thực sự thấy có địa chỉ IP công cộng của bạn. –

+0

có thể trùng lặp của [Có thể xác định chính xác địa chỉ IP của ứng dụng khách trong java servlet] không (http://stackoverflow.com/questions/9326138/is-it-possible-to-accurately-determine-the-ip- địa chỉ-của-một-khách-trong-java-servle) – YoYo

Trả lời

22

Hãy thử thế này,

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

tham khảo: http://www.mkyong.com/java/how-to-get-client-ip-address-in-java/

+0

Khi tôi sử dụng mã trên, tôi nhận được 'localhost' không phải là địa chỉ ip của tôi. –

+3

Tiêu đề X-FORWARD-FOR hơi rủi ro ở đây. Bởi vì nếu bạn sử dụng proxy ngược cho yêu cầu, giá trị tiêu đề này sẽ như thế này: 231.23.45.65, 10.20.10.33, 10.20.20.34 (có nghĩa là ip của khách hàng, máy chủ cân bằng tải, máy chủ proxy ngược). Kiểm tra xem giá trị tiêu đề X-FORWARD-FOR của bạn có chứa ',' hay không. 'ipAddress.contains (", ")? ipAddress.split (",") [0]: ipAddress' – utkusonmez

-2
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);  
} 
} 

Output:

IP address of localhost from Java Program: 190.12.209.123 
Name of hostname : PCLOND3433 
+3

Điều này không trả lời được câu hỏi. Câu hỏi là về địa chỉ ip của khách hàng không phải máy chủ (localhost). –

Các vấn đề liên quan