2012-07-27 9 views
6

में क्लाइंट का आईपी पता प्राप्त करें मुझे जेएसपी पेज में क्लाइंट का आईपी पता प्राप्त करने की आवश्यकता है। मैं निम्न तरीकों की कोशिश की है:जेएसपी

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") 

हालांकि, उन तरीकों में से कोई भी वांछित IP पता लौटा था। मैं जेएसपी पेज में क्लाइंट का आईपी पता कैसे प्राप्त करूं?

+0

यदि आप कस्टम हेडर का उपयोग करते हैं, तो हमेशा उन्हें 'एक्स- ' नाम दें। –

+0

'request.getRemoteAddr()' वापसी क्या करता है? – Jeshurun

+0

यह भी देखें [यह] (http://stackoverflow.com/q/1423347/473637) प्रश्न। – Jeshurun

उत्तर

0

क्या आप अपाचे प्रॉक्सी जैसे रिवर्स प्रॉक्सी का उपयोग करते हैं? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

जब एक रिवर्स प्रॉक्सी मोड में अभिनय (ProxyPass निर्देशों का उपयोग, उदाहरण के लिए), mod_proxy_http क्रम मूल सर्वर को जानकारी भेजने के लिए कई अनुरोध हेडर कहते हैं। इन हेडर हैं:

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

सर्वर और क्लाइंट के बीच कोई प्रॉक्सी का उपयोग नहीं किया जाता है। X-Forwarded-for, X-Forwarded-Host, X-Forwarded-Server का उपयोग कर सभी मान प्रॉक्सी का शून्य कारण नहीं दे रहे हैं। –

+0

यदि आप किसी भी रिवर्स प्रॉक्सी का उपयोग नहीं कर रहे हैं, तो बस http servlet API - httpServletRequest.getRemoteHost() और getRemotePOrt() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html का उपयोग करें –

+0

httpServletRequest में कुछ भी मौजूद नहीं है जो मुझे क्लाइंट का आईपी प्रदान करेगा। मैंने पूरे एपीआई की जांच की है। –

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

आप वास्तविक ग्राहक आईपी यदि एक ग्राहक एक प्रॉक्सी के पीछे है नहीं मिल सकता है, तो आप प्रॉक्सी और नहीं क्लाइंट का IP मिल जाएगा। हालांकि, प्रॉक्सी में एक विशेष HTTP शीर्षलेख में अनुरोध क्लाइंट आईपी शामिल हो सकता है।

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

लेकिन क्लाइंट और अनुरोधित सर्वर के बीच कोई प्रॉक्सी कॉन्फ़िगर नहीं होने पर क्लाइंट का आईपी कैसे प्राप्त करें। –

+0

[लिंक] (http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress) इस पोस्ट को देखें। – kinaesthesia

+0

आउटपुट 0 की तरह आता है: 0: 0: 0: 0: 0: 0: 1 आपको कोई विचार है क्यों ?? –

3

क्या आपका एप्लिकेशन सर्वर लोड बैलेंसर, प्रॉक्सी या वेब सर्वर के पीछे है? बस एक उदाहरण; F5 लोड संतुलन "rlnclientipaddr" शीर्षक के साथ ग्राहक आईपी पते को उजागर करता है:

request.getHeader("rlnclientipaddr"); 
2

क्लाइंट का IP पता पाने के लिए, मैं निम्नलिखित पद्धति का उपयोग किया

<% 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(); 
     } 
     %> 

आशा इस मदद करता है, कृपया एक फीड वापस छोड़ दें।