2008-11-04 17 views
6

मैं जावा सर्वलेट के साथ एक वेब ऐप विकसित कर रहा हूं, मुझे processRequest(HttpServletRequest request,HttpServletResponse response) के अंदर request.getRemoteAddr() पर कॉल करके उपयोगकर्ता आईपी जानकारी प्राप्त करने की उम्मीद है।क्यों HttpServletRequest.getRemoteAddr() जावा सर्वलेट में काम नहीं करता है?

लेकिन यह एक गलत आईपी देता है। जब से मैं इस क्षेत्र के बारे में बहुत जानकार नहीं हूँ, मैं नहीं जानता कि यह क्या प्रदर्शित कर रहा है, हो सकता है एक प्रॉक्सी, मैं यह मिल गया:

 
RemoteAddr : 127.0.0.1 
RemoteHost : 127.0.0.1 
x-forwarded-for : null 

127.0.0.1 मेरे IP नहीं है।

फिर भी जब मैं जाता हूं: http://www.javascriptkit.com/script/script2/displayip.shtml यह सही प्रदर्शन करेगा, क्योंकि मैं सर्वलेट का उपयोग कर रहा हूं, मेरे पास मेरे गतिशील रूप से जेनरेट किए गए HTML पृष्ठ पर .shtml नहीं है, मैं क्या कर सकता हूं? और उस साइट पर लिपि सही तरीके से प्रदर्शित क्यों हो सकती है जबकि request.getRemoteAddr() ऐसा नहीं कर सकता है?

सभी उत्तरों के लिए धन्यवाद, मेरे पास सर्वर पर तैनात करने के बाद अब एक सुराग है, यह अपेक्षा के अनुसार काम करता है। सही पता दिखाया गया।

लेकिन जब भी मैं इसे अपनी स्थानीय मशीन पर विकसित करता हूं, तो इसे पूर्ण आईपी प्रदर्शित करने के लिए कैसे कहें जैसे कि यह वास्तविक सर्वर पर चल रहा है? या यह करने योग्य है?

+0

जब आप 'गलत आईपी' कहते हैं, तो आपके डोमेन के भीतर पता है? यह कितना गलत है? क्या आप हमें कॉल _is_ लौटने के बारे में और जानकारी दे सकते हैं? –

उत्तर

19

यह आईपी पता क्या प्रदर्शित कर रहा है? मेरा अनुमान है कि कुछ प्रॉक्सी या कुछ बदलती चीजें हैं। (उदाहरण के लिए, उस स्क्रिप्ट पेज ने मेरे एडीएसएल राउटर के आईपी पते को प्रदर्शित किया - मेरे कारणों में से एक नहीं - स्पष्ट कारणों से।)

संपादित करें: अब जब आपने दिखाया है कि आप जो आईपी पता देख रहे हैं वह 127.0.0.1 है जवाब काफी स्पष्ट है - आप अपने लूपबैक एडेप्टर (यानी उसी मशीन के शॉर्टकट) को देख रहे हैं, संभवतः क्योंकि आप उसी मशीन पर परीक्षण कर रहे हैं जिस पर आप विकास कर रहे हैं। जवाब पूरी तरह से सही है।

इसे एक अलग मशीन से आज़माएं और आपको एक और उपयोगी आईपी पता मिलेगा।

+0

यह मेरा प्रश्न भी होगा। आपने अभी तेज़ी से टाइप किया है। :) – Herms

4

अनुरोध को कॉल करके एक्स-फॉरवर्डेड-हेडर के लिए जांचें .getHeader ("एक्स-फॉरवर्ड-फॉर") और देखें कि यह आईपी क्या करता है।

+0

हम इस हेडर का उपयोग करते हैं और यदि यह उपलब्ध नहीं है तो अनुरोध पर वापस आना .getRemoteAddr() – singhspk

3

लौटा आईपी जो आप दिखा रहे हैं वह स्थानीयहोस्ट आईपी है। यह सवाल उठाता है - आप कहां परीक्षण कर रहे हैं, और आप परीक्षण के लिए सर्वलेट तक कैसे पहुंच रहे हैं?

यदि आप अपनी स्थानीय (विकास) मशीन पर सर्वलेट चला रहे हैं, और उसी मशीन पर ब्राउज़र से इसे कॉल कर रहे हैं, तो यह आउटपुट बिल्कुल सही है।

चीयर्स,

आर

1

आप अपने स्थानीय कंप्यूटर पर अपने परीक्षण सर्वर चला रहे हैं और http://localhost/ पर यह करने के लिए जोड़ने। चूंकि आप स्थानीय इंटरफेस पर कनेक्ट हो रहे हैं, कनेक्शन का स्रोत भी स्थानीयहोस्ट, उर्फ ​​127.0.0.1 है।

1

यदि आप http://localhost:8080/servlet का उपयोग करके अपने सर्वलेट को कॉल करते हैं, तो आपको आमतौर पर रिमोट एडीआर के रूप में "लोकलहोस्ट" मिल जाएगा। यदि आप अपनी मशीन के नाम का उपयोग करते हैं, यानी http://yourmachine/servlet, तो आपको हमें "सही" पता मिल जाएगा।

+0

यह काम नहीं किया! – Moesio

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