दोहरे स्टैक OSes में :: और 0.0.0.0 का शब्दार्थ


10

IPv4-only दिनों में, LISTEN कनेक्शन netstatजिस पर सुनने के रूप 0.0.0.0में सिस्टम में किसी भी IPv4 इंटरफ़ेस पर कनेक्शन का जवाब होगा।

जैसा कि मैं इसे समझता हूं, नए आईपीवी 6 मुहावरे ::सभी उपलब्ध आईपीवी 6 और आईपीवी 4 इंटरफेस पर सुनते हैं । क्या यह सही है, सभी OSes (Unix, Windows, Mac) के लिए? वहाँ सिर्फ IPv6 इंटरफेस पर सुनने के लिए एक मुहावरा है?

जवाबों:


17

दुर्भाग्य से, यह इस बात पर निर्भर करता है कि आप किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं।

Microsoft Windows पर, ::केवल सॉकेट को बांधने से IPv6 पोर्ट से जुड़ जाता है। इस प्रकार IPv4 और IPv6 दोनों पर सभी पतों को सुनने के लिए, आपको 0.0.0.0साथ ही साथ बांधने की जरूरत है ::। निम्नलिखित अर्क विस्टा बॉक्स से है:

C:\>netstat -an | find "445"
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    [::]:445               [::]:0                 LISTENING

उदाहरण मैं दे रहा हूँ पोर्ट 445, SMB यातायात के लिए प्रयोग किया जाता है जब NetBIOS का उपयोग नहीं किया जाता है। जैसा कि आप देख सकते हैं, यह दोनों के लिए बाध्यकारी है 0.0.0.0और ::बनाने के लिए, क्रमशः, आईपीवी 4 और आईपीवी 6 दोनों क्लाइंट काम करते हैं।

लिनक्स पर, ::आईपीवी 4-संगत पतों के समावेशी है, जैसा कि आपने सही अनुमान लगाया है, इसलिए 0.0.0.0साथ ही साथ बाध्यकारी अनावश्यक है। मैंने एक साधारण पायथन प्रोग्राम लिखा जो केवल एक AF_INET6सॉकेट पर बांधता है ::। भले ही मैं भी एक AF_INET(IPv4) सॉकेट के लिए बाध्य नहीं था , यह अभी भी IPv4 ग्राहकों से कनेक्शन स्वीकार करता है। अगर, कहते हैं, इससे 10.1.1.3कनेक्ट होता है, तो यह कनेक्ट होने के रूप में दिखाई देगा ::ffff:10.1.1.3

सिवाय इसके कि यह बालों को मिलता है। उपरोक्त लिनक्स पर लागू नहीं होता है यदि /proc/sys/net/ipv6/bindv6onlyसेट किया जाता है 1, तो इस मामले में व्यवहार बिल्कुल विंडोज के समान है - ::केवल IPhone6 ​​अनुरोधों को सुनने के लिए बाध्यकारी । यदि आप IPv4 अनुरोधों के लिए भी सुनना चाहते हैं, तो आपको एक AF_INETसॉकेट बनाने और 0.0.0.0साथ ही सुनने की आवश्यकता होगी । सौभाग्य से, डिफ़ॉल्ट के लिए bindv6onlyहै 0, इसलिए एक बहुत ही पतली संभावना है कि आपको कभी भी इससे निपटना होगा (सिवाय अगर आप डेबियन का उपयोग करते हैं, जो वास्तव में चूक है bindv6only = 1)।

यह देखने के लिए चेकिंग में यह जानना आसान है कि क्या कोई सेवा IPv6- सक्षम है, और क्या यह IPv4- सक्षम भी है। यहाँ मेरा SSH सर्वर है:

$ netstat -64ln | grep 22
tcp6    0    0 :::22    :::*    LISTEN

जैसा कि आप देख सकते हैं, एसएसएच केवल ::पोर्ट 22 पर सुन रहा है । हालांकि, यह सिर्फ आईपीवी 6 ग्राहकों के लिए नहीं सुन रहा है - यह आईपीवी 4 ग्राहकों के लिए ठीक काम करता है, क्योंकि आईपीवी 4-संगत बाइंडिंग है। यह साबित करने के लिए, यदि आप इसे देखते हैं:

$ cat /proc/sys/net/ipv6/bindv6only 
0

bindv6onlyअक्षम है (डिफ़ॉल्ट)। यदि यह निर्धारित किया गया था 1, तो मुझे SSH को 0.0.0.0भी (या इसके बजाय) सुनने के लिए प्रोत्साहित करना होगा ।

मैक ओएस एक्स चीजों के पक्ष में कोई जानकारी नहीं होने के लिए माफी। मैंने अतीत में इसका उपयोग किया है, लेकिन मैं गनोम के सौंदर्यशास्त्र को पसंद करता हूं, इसलिए मैंने बहुत लंबे समय में इसका उपयोग नहीं किया है। हालाँकि, मुझे लगता है कि व्यवहार लिनक्स के समान ही है।

उम्मीद है की यह मदद करेगा।


4

यह संभव नहीं है, क्योंकि IPv6 एड्रेस स्पेस का एक सेक्शन IPv4 स्पेस जैसा ही है, इसलिए भले ही आप किसी तरह IPv4 सॉकेट्स को डिसेबल कर सकें, फिर भी आप IPv4 सॉकेट्स को IPv4 पैकेट भेज पाएंगे। IPv4 विकिपीडिया पृष्ठ में IPv4 संक्रमण अनुभाग चेकआउट करें ।

संपादित करें: आह, थोड़ा और नीचे यह कहता है:

कुछ सामान्य IPv6 स्टैक IPv4 मैप की गई पता सुविधा का समर्थन नहीं करते हैं, क्योंकि IPv6 और IPv4 स्टैक अलग-अलग कार्यान्वयन हैं (विस्टा / लॉन्गहॉर्न से पहले Microsoft Windows: जैसे XP / 2003), या सुरक्षा चिंताओं के कारण (OpenBSD)। इन ऑपरेटिंग सिस्टमों पर, प्रत्येक आईपी प्रोटोकॉल के लिए एक अलग सॉकेट खोलना आवश्यक है जिसे समर्थन किया जाना है। कुछ प्रणालियों पर (उदाहरण के लिए, लिनक्स, नेटबीएसडी, फ्रीबीएसडी) इस सुविधा को सॉकेट विकल्प IPV6_V6ONLY द्वारा RFC 3493 में निर्दिष्ट किया गया है।

-1

आप शायद इसे अपने नेटवर्क आईडी, AAAA: BBBB: CCCC: DDDD :: या जो भी आपके लिए है, के साथ कर सकते हैं। यह गारंटी होगी कि केवल IPv6 इंटरफेस इसे उठाएगा। मुझे लगता है। मैं कोई आईपीवी 6 मास्टर नहीं हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.