2010-06-25 19 views
13

मैंने स्प्रिंग/जीडब्ल्यूटी के साथ एक वेब ऐप किया है जो फ़ाइलों को अपलोड करने के लिए फ्लैश का उपयोग करता है।क्यों अनुरोध.getRemoteAddr() संदर्भ (पोस्ट क्वेरी या AJAX क्वेरी) के आधार पर ipv4 या ipv6 देता है

जब मैं GWT के साथ एक ajax अनुरोध भेजने और उपयोगकर्ता आईपी पते प्राप्त करने की कोशिश, मैं एक IPv4 पते की तरह: 127.0.0.1

लेकिन जब मैं फ्लैश के साथ मेरी फाइल अपलोड (और इतने पर एक पोस्ट अनुरोध एक ही वेबएप्लिकेशन) मैं एक IPv6 पता मिल 0: 0: 0: 0: 0: 0: 0:

ServletRequestAttributes att = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
att.getRequest().getRemoteAddr(); 

समस्या: 1

मैं उपयोगकर्ता आईपी जो है प्राप्त करने के लिए एक ही कोड का उपयोग यह है कि मैं एक हस्ताक्षर का उपयोग करता हूं जो आईपी पते का उपयोग यह सुनिश्चित करने के लिए करता है कि उपयोगकर्ता फाइल अपलोड कर सकता है (अपोलो के दौरान खोए गए सत्र के साथ बग के कारण फ्लैश के साथ डिंग) और आईपी एड्रेस बदलता है जब मैं एजेक्स या फ्लैश के माध्यम से पोस्ट का उपयोग करता हूं।

समस्या क्या है और मैं एक ही आईपी प्रारूप कैसे प्राप्त कर सकता हूं?

धन्यवाद

+0

आप उपयोगकर्ता का उपयोग करने वाले आईपी पते को नियंत्रित नहीं कर सकते हैं, इसके बजाय कुकीज़ को आजमाएं। –

उत्तर

11

कारण यह है कि नाम आप अपने ब्राउज़र में लिखे गए दोनों IPv4 और IPv6 पतों है। ब्राउज़र ipv4 का उपयोग करने का विकल्प चुनता है, फ्लैश ipv6 का उपयोग करने के लिए चुनता है। सर्वर पक्ष पर इसके बारे में आप कुछ भी नहीं कर सकते हैं (कन्वर्ट करने का कोई तरीका नहीं है)।
हालांकि, आप अपना DNS बदल सकते हैं और अपना नाम केवल एक पता कर सकते हैं, या तो ipv4 या ipv6। आप एक शाब्दिक आईपी पते (127.0.0.1) से भी कनेक्ट कर सकते हैं, नाम (लोकलहोस्ट) नहीं।

+2

तो, मैं उपयोगकर्ता की पहचान कैसे कर सकता हूं? उसे विभिन्न सेटिंग्स बदलने के लिए पूछे बिना। –

+0

आपके द्वारा होस्ट किए गए होस्टनाम का क्या नाम है (क्लाइंट)? क्या यह लोकहोस्ट है? क्या यह असली होस्टनाम है? – unbeli

+0

लोकलहोस्ट (मेरे लिए डीबग करते समय) और वास्तविक होस्टनाम (असली ग्राहक) –

31

आपको इस फ़्लैग

-Djava.net.preferIPv4Stack=true 
+0

यह मेरे लिए चाल है – RJo

+0

यह मेरे लिए काम करता है। –

0

आप एक IPv6 पता तो IPv6 किया जा रहा है पाने के साथ अपने सर्वर शुरू करने से इसे ठीक कर सकते हैं। आईपीवी 4 और आईपीवी 6 अलग-अलग प्रोटोकॉल हैं, और ग्राहक चुनते हैं कि दोनों उपलब्ध होने पर किस का उपयोग करना है।

यदि आप ग्राहक के आईपीवी 4 पते चाहते हैं तो आप उन्हें DNS में IPv6 पते का विज्ञापन न करके इसका उपयोग करने के लिए मजबूर कर सकते हैं। आईपीवी 6 की बढ़ती तैनाती के साथ हालांकि यह एक बुरा विचार होगा। दोनों का समर्थन अच्छा है, इसलिए आईपीवी 6 का उपयोग कर ग्राहकों से निपटना बेहतर है।

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