IP 0.0.0.0 से कनेक्ट करना सफल होता है। कैसे? क्यों?


41

हम लोकलहोस्ट पर पोर्ट की सेवा दे रहे हैं और यदि पोर्ट उपलब्ध है तो किसी अन्य प्रक्रिया में जांच करना चाहते हैं। हमारे कोड में एक बग के कारण, यह वास्तव में आईपी से जुड़ने की कोशिश कर रहा है 0.0.0.0:<port>, और किसी कारण से यह सफल होता है - जैसा कि स्ट्रेस साबित होता है:

[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]

इसका क्या मतलब है? यह काम क्यों करता है?


जवाबों:


68

लक्ष्य पते के रूप में 0.0.0.0 एक गैर-रूटेबल होस्ट या "इस होस्ट" को संदर्भित करता है । अभ्यास में 0.0.0.0 से कनेक्ट करना लोकलहोस्ट से कनेक्ट करने के बराबर है। (कड़ाई से बोलते हुए यह गंतव्य पते के रूप में मान्य नहीं है, केवल स्रोत पते के रूप में, लेकिन अभ्यास सिद्धांत से मेल नहीं खाता है।)

जब बाध्यकारी, "यह मेजबान" "इस मेजबान पर किसी भी पते" पर फैलता है - इसलिए आवेदन आमतौर पर 0.0.0.0 से बाइंडिंग द्वारा कनेक्शन स्वीकार करते हैं, जिसका अर्थ है कि वे सिस्टम पर किसी भी आईपीवी 4 पते को संबोधित पैकेट प्राप्त करेंगे।


7
इस उत्तर को थोड़ा विस्तारित करने के लिए - इसका अर्थ है "इस प्रणाली पर कोई भी आईपी पता, जिसमें आईपी शामिल हैं, जो सुनने की प्रक्रिया शुरू होने के बाद जोड़े गए हैं"
क्रैगी

5
लोकलहोस्ट एक एकल पता है, ज्यादातर 127.0.0.1, जबकि 0.0.0.0 का मतलब इस होस्ट के सभी पते हैं।
२१

@rexkogitans localhost एक एकल पता नहीं है, लेकिन 127.0.0.0/8 की सीमा में कोई भी पता नहीं है - अर्थात 127.0.0.0 से 127.255.255.255 तक का कोई भी पता
Dezza

6
@ डेज़ा नं, लोकलहोस्ट 127.0.0.1 है। 127.0.0.0/8 (जैसा कि आप कहते हैं, 127.255.255.255 के माध्यम से 127.0.0.0 उर्फ) अधिकांश उपकरणों के साथ लूपबैक है, उदाहरण के लिए RFC 5735 पृष्ठ 4 द्वारा प्रलेखित । (दिलचस्प बात यह है कि कुछ सिस्को उपकरण लूपबैक को किसी भी पते पर असाइन कर सकते हैं, लेकिन लूपबैक का समर्थन नहीं करने के लिए चूक करते हैं। ऐसा नहीं है कि यह नेटवर्क पर अन्य उपकरणों को प्रभावित करने की संभावना है।) हालांकि, लोकलहोस्ट एक नाम है, आमतौर पर सिर्फ एक को इंगित करता है। पता जो 127.0.0.1 है, और आमतौर पर "होस्ट" फ़ाइल का उपयोग करके कार्यान्वित किया जाता है। इसलिए मैं आपके द्वारा किए गए सुधार से असहमत हूं।
TOOGAM

क्या आप स्पष्ट कर सकते हैं कि आपके द्वारा "एक गंतव्य पते के रूप में मान्य नहीं है, केवल एक स्रोत पते के रूप में"? जब mysql सर्वर 0.0.0.0 पर सुनता है, तो पता गंतव्य या स्रोत है? क्या यह mysql क्लाइंट से भेजे गए अनुरोध का गंतव्य नहीं है?
टिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.