2012-07-27 65 views
6

Tôi cần lấy địa chỉ IP của ứng dụng khách trong trang JSP. Tôi đã thử các cách sau:Nhận địa chỉ IP của ứng dụng khách trong JSP

request.getRemoteAddr() 
request.getHeader("X_FORWARDED_FOR") 
request.getHeader("HTTP_CLIENT_IP") 
request.getHeader("WL-Proxy-Client-IP") 
request.getHeader("Proxy-Client-IP") 
request.getHeader("REMOTE_ADDR") 

Tuy nhiên, không có cách nào trả lại địa chỉ IP mong muốn. Làm thế nào để tôi nhận được địa chỉ IP của máy khách trong trang JSP?

+0

Nếu bạn sử dụng tiêu đề tùy chỉnh, hãy luôn đặt tên cho chúng là 'X- '. –

+0

Trả về 'request.getRemoteAddr()' là gì? – Jeshurun

+0

Đồng thời xem câu hỏi [this] (http://stackoverflow.com/q/1423347/473637). – Jeshurun

Trả lời

0

bạn có sử dụng proxy ngược như proxy apache không? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

Khi diễn xuất trong một chế độ reverse-proxy (sử dụng chỉ thị ProxyPass, ví dụ), mod_proxy_http thêm một số tiêu đề yêu cầu để chuyển thông tin đến máy chủ gốc. Những tiêu đề là:

X-Forwarded-For 
The IP address of the client. 
X-Forwarded-Host 
The original host requested by the client in the Host HTTP request header. 
X-Forwarded-Server 
The hostname of the proxy server. 
+0

Không có Proxy nào được sử dụng giữa máy chủ và máy khách. Tất cả các giá trị nhận được bằng cách sử dụng X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Server đang cho nguyên nhân null của proxy không được sử dụng. –

+0

nếu bạn không sử dụng bất kỳ proxy ngược nào, chỉ cần kiểm tra sử dụng http servlet API - httpServletRequest.getRemoteHost() và getRemotePOrt() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html –

+0

Không có gì có trong httpServletRequest sẽ cung cấp cho tôi IP của Khách hàng. Tôi đã kiểm tra toàn bộ API. –

3
<% 
out.print(request.getRemoteAddr()); 
out.print(request.getRemoteHost()); 
%> 

Bạn không thể có được những khách hàng thực sự chỉ IP nếu một khách hàng là sau một proxy, bạn sẽ nhận được IP của proxy và không phải là khách hàng. Tuy nhiên, proxy có thể bao gồm IP ứng dụng khách yêu cầu trong tiêu đề HTTP đặc biệt.

<% 
out.print(request.getHeader("x-forwarded-for")); 
%> 
+0

Nhưng cách nhận IP của máy khách khi không có proxy được cấu hình giữa máy khách và máy chủ được yêu cầu. –

+0

[link] (http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress) Xem bài đăng này. – kinaesthesia

+0

đầu ra đi kèm như 0: 0: 0: 0: 0: 0: 0: 1 bạn có ý tưởng gì không ?? –

3

Máy chủ ứng dụng của bạn có nằm trong trình cân bằng tải, proxy hoặc máy chủ web không? Chỉ là một ví dụ; F5 cân bằng tải cho thấy nhiều địa chỉ IP của khách hàng với "rlnclientipaddr" tiêu đề:

request.getHeader("rlnclientipaddr"); 
2

Để có được địa chỉ IP của khách hàng, tôi đã sử dụng các phương pháp sau đây

<% String ip = request.getHeader("X-Forwarded-For"); 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("Proxy-Client-IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("WL-Proxy-Client-IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("HTTP_CLIENT_IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getRemoteAddr(); 
     } 
     %> 

Hope this helps, xin vui lòng để lại một nguồn cấp dữ liệu.

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