2009-12-02 15 views
8

में क्लाइंट आईपी पता प्राप्त करना मुझे अपने जीडब्ल्यूटी/जीएई (जावा) एप्लिकेशन में क्लाइंट का आईपी पता कैप्चर करने की आवश्यकता है। चूंकि जीएई java.net एपीआई के पूर्ण सेट का समर्थन नहीं करता है, इसलिए मैं नीचे स्निपेट जैसे कोड नहीं कर सकता। क्या कोई इसे प्राप्त करने का विश्वसनीय तरीका सुझा सकता है?जीडब्ल्यूटी और Google ऐप इंजन

for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
    final NetworkInterface intf = en.nextElement(); 
    for (final Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
     final InetAddress ip = enumIpAddr.nextElement(); 
     if (!ip.isLoopbackAddress() && !ip.isLinkLocalAddress() && !ip.isAnyLocalAddress()) { 
       return ip.getHostAddress().toString(); 
     } 
    } 
} 

अजगर संस्करण के लिए एक कर सकते हैं:

os.environ['REMOTE_ADDR'] 

या

String ip = self.request.remote_addr; 

लेकिन क्या होगा एक जावा बराबर?

उत्तर

15

ठीक है - इसे मिला। जो RemoteServiceServlet का विस्तार करना चाहिए अपने सर्वलेट में ऐसा करते हैं:

final String ip = getThreadLocalRequest().getRemoteAddr(); 
6

आप एक प्रॉक्सी के पीछे हैं, उदाहरण के लिए, यदि आप ProxyPass और ProxyPassReverse का उपयोग आप इस उपयोगी मिल सकता है:

this.getThreadLocalRequest().getHeader("X-FORWARDED-FOR") 
0

वास्तव में, यदि आप आईपी ​​पता चाहते हैं कि आप getRemoteHost के बजाय getRemoteAddr का उपयोग करना चाहें।

String ip = getThreadLocalRequest().getRemoteAddr(); 
String host = getThreadLocalRequest().getRemoteHost(); 
  • getRemoteAddr आप ग्राहक के इंटरनेट प्रोटोकॉल (आईपी) पते देता है।
  • getRemoteHost आपको क्लाइंट का पूर्ण योग्य नाम देता है, यदि होस्ट नाम खाली है तो आईपी।

ओरेकल जावाडोक देखें: http://docs.oracle.com/javaee/7/api/javax/servlet/ServletRequest.html#getRemoteAddr%28%29

+0

है यही कारण है कि मैं अपने ही स्वीकार किए जाते हैं जवाब में दिखाने – Bostone

+0

देखा कि, अभिमान होने के लिए मतलब नहीं था। बस getRemoteAddr और getRemoteHost के बीच का अंतर इंगित करना चाहता था। – mlkammer

संबंधित मुद्दे