सवाल 1 9 2.168.072 (केवल 2 बिंदु) पिंगिंग क्यों करता है 1 9 2.168.0.58 से प्रतिक्रिया देता है?


मैंने गलती से एक आईपी पते के डॉट ऑफ को याद किया और टाइप किया 192.168.072
मेरे आश्चर्य के लिए मैं एक मशीन से जुड़ा हुआ है 192.168.0.58

अगर मैं पिंग करता हूँ 192.168.072 मुझे जवाब मिलते हैं 192.168.0.58

ऐसा क्यों है?


मैं एक विंडोज़ पीसी पर एक विंडोज पीसी पर हूँ।


अगर मैं पिंग करता हूँ 192.168.72 मुझे एक प्रतिक्रिया मिलती है 192.168.0.72, तो ऐसा लगता है 0 में 072 (मेरी मूल गलती में) महत्वपूर्ण है।


यह सवाल एक था सप्ताह के सुपर उपयोगकर्ता प्रश्न
को पढ़िए ब्लॉग प्रविष्टि अधिक जानकारी के लिए या ब्लॉग में योगदान स्वयं


373
2017-10-12 10:26


मूल


प्रासंगिक:  blog.superuser.com/2012/02/10/wtfriday-http2915189091 - Tom Wijsman
दिलचस्प बात यह है कि लिनक्स पर वही बात होती है: ping 192.168.072 प्रिंट PING 192.168.072 (192.168.0.58) 56(84) bytes of data.[...]। - Mechanical snail
और भी यादृच्छिक बात यह है कि आपके पास एक मशीन थी 192.168.0.58 प्रतिक्रिया प्राप्त करने के लिए। उसमें विचित्र क्या है? - KronoS
@ क्रोनोएस यदि आप स्कूल या कंपनी नेटवर्क पर हैं तो यह वास्तव में अजीब नहीं है। कुछ डीएचसीपी सर्वर बढ़ते क्रम में पते देंगे और उनमें से अधिकतर का उपयोग किया जाएगा। - Taum
192.168.0.58 मेरे लिए समय समाप्त हो रहा है .. क्या सभी पिंग अनुरोधों ने किसी भी तरह से सर्वर को खारिज कर दिया है ?! - iamserious


जवाब:


आरएफसी, आईपी कक्षाओं और इस तरह के सभी लोग इसे अधिक जटिल बना रहे हैं। यह देखने के लिए बस कुछ परीक्षण चलाएं ping कमांड उपयोगकर्ता द्वारा आईपी इनपुट पार्स करता है (बाहरी चाफ हटा दिया जाता है):

> ping 1
Pinging 0.0.0.1 with 32 bytes of data:

> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:

> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:

> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:

> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.

> ping 255
Pinging 0.0.0.255 with 32 bytes of data:

> ping 256
Pinging 0.0.1.0 with 32 bytes of data:

जैसा कि आप देख सकते हैं, ping कमांड (विंडोज़ में) आपको विभिन्न आईपी एड्रेस प्रारूपों का उपयोग करने की अनुमति देता है। एक आईपीवी 4 पता चार भागों ("बिंदीदार-क्वाड") में विभाजित किया जा सकता है: A.B.C.D, और यह ping कमांड आपको डिफ़ॉल्ट रूप से भरने, कुछ छोड़ने की अनुमति देता है 0 निम्नलिखित नुसार:

1 part  (ping A)       : 0.0.0.A
2 parts (ping A.B)     : A.0.0.B
3 parts (ping A.B.C)   : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D

यदि आप केवल एक ही भाग की आपूर्ति करते हैं, तो यदि यह 255 (अधिकतम ऑक्टेट के लिए अधिकतम) है, तो इसे उपरोक्त के रूप में एक ऑक्टेट की तरह माना जाता है, लेकिन यदि यह 255 से अधिक है, तो इसे अगले क्षेत्र में परिवर्तित और घुमाया जाता है (अर्थात, mod 256)।

कुछ किनारे के मामले हैं जैसे चार से अधिक हिस्सों को प्रदान करना प्रतीत नहीं होता है (उदाहरण के लिए, पिंगिंग google.comआईपी ​​या तो काम नहीं करेगा 0.74.125.226.4 या 74.125.226.4.0)।

आप दोनों बिंदीदार-चौकोर और फ्लैट रूप में हेक्साडेसिमल नोटेशन का भी उपयोग कर सकते हैं, लेकिन इसे पूर्व-लंबित द्वारा प्रारूपित करना होगा 0x प्रत्येक ऑक्टेट के लिए।


इसलिए, एक (आईपीवी 4) आईपी पते का प्रतिनिधित्व करने के कई तरीके हैं। आप फ्लैट या बिंदीदार-क्वाड (या बिंदीदार-ट्रिपल, बिंदीदार, डबल, या यहां तक ​​कि बिंदीदार-एकल) प्रारूप का उपयोग कर सकते हैं, और प्रत्येक के लिए, आप दशमलव, ऑक्टल और हेक्साडेसिमल का उपयोग (या यहां तक ​​कि मिश्रण और मिलान) कर सकते हैं। उदाहरण के लिए, आप पिंग कर सकते हैं google.com निम्नलिखित तरीकों से:

  • google.com(डोमेन नाम)
  • 74.125.226.4(बिंदीदार दशमलव)
  • 1249763844(फ्लैट दशमलव)
  • 0112.0175.0342.0004(बिंदीदार ऑक्टल)
  • 011237361004(फ्लैट ऑक्टल)
  • 0x4A.0x7D.0xE2.0x04(बिंदीदार हेक्स)
  • 0x4A7DE204(फ्लैट हेक्स)
  • 74.0175.0xe2.4(ಠ_ಠ)

(भलाई का शुक्र है कि बाइनरी नोटेशन समर्थन जोड़ा नहीं गया था!)


आवेदन:

आपके मामले में, पिंगिंग 192.168.072 उपर्युक्त तालिका में तीसरे प्रारूप का उपयोग करता है (A.B.0.C), तो आप वास्तव में पिंग कर रहे हैं 192.168.0.072। इसके अलावा, क्योंकि आपके पास अंतिम भाग पर अग्रणी शून्य है, इसे ऑक्टल के रूप में माना जाता है, जो दशमलव में 58 है।

रहस्य सुलझ गया।


नोट, कि विंडोज़ के दौरान ping आदेश इनपुट के लिए इस तरह के विस्तृत प्रारूपों की अनुमति देता है और देखे गए तरीकों से गैर-मानक स्वरूपों का अर्थ देता है, इसका मतलब यह नहीं है कि आप हर जगह ऐसे प्रारूपों का उपयोग कर सकते हैं। कुछ प्रोग्राम आपको डॉट-क्वाड के सभी चार हिस्सों को प्रदान करने के लिए मजबूर कर सकते हैं, अन्य मिश्रण और दशमलव और ऑक्टल से मेल खाने की अनुमति नहीं दे सकते हैं, और इसी तरह।

इसके अलावा, आईपीवी 6 पते पार्सिंग तर्क और इनपुट प्रारूप स्वीकार्यता को और जटिल बनाते हैं।


परिशिष्ट:

syss ने बताया कि यदि आप किसी एक संख्या में अमान्य वर्ण का उपयोग करते हैं (उदा।, ए 8 या 9 ऑक्टल का उपयोग करते समय, ए g हेक्स मोड में, आदि) तो ping एक वैज्ञानिक आईपी पते के बजाय इसे एक स्ट्रिंग (-al? -ic?) यूआरएल के रूप में पहचानने और समझने के लिए पर्याप्त स्मार्ट है।

(किसी ऐसे व्यक्ति के रूप में जिसने कई मूल्यवानताएं और दिल-हमलों को डेटा मूल्यों के क्रमिक रूप से विस्फोटक संख्या को समायोजित करने के लिए "सरल" कोड लिखने की कोशिश की है, मैं सराहना करता हूं कि यह सभी इनपुट विविधताओं को सही तरीके से संसाधित करता है; इसमें मामला, कम से कम 31+32+33+34=120 विविधताओं।)

तो, निर्दिष्ट करते समय 010.020.030.040 पिंग करेंगे 8.16.24.32 जैसा कि अपेक्षित, गुजर रहा है 010.020.030.080 सेवा मेरे ping आईपी ​​पते की तरह यूआरएल की तरह व्यवहार किया जाएगा foo.bar.baz.com जो (लेकिन दुख की बात नहीं है) मौजूद हो सकता है। दूसरे शब्दों में, यह सबडोमेन पिंग करने की कोशिश करता है 010 सबडोमेन पर 020 डोमेन पर 030 शीर्ष-स्तरीय डोमेन पर 080। हालांकि, के बाद से 080 वैध टीएलडी नहीं है (जैसे .com, .net, और उनके दोस्त), कनेक्शन पहले चरण में सही विफल रहता है।

वही बात होती है 090.010.010.010 जहां अमान्य चरित्र एक अलग ऑक्टेट में है। इसी तरह, 0xf.0xf.0xf.0xf पिंग्स 15.15.15.15, परंतु 0xh1.0x1.0xg0.0f विफल रहता है।

ओह ठीक है, मुझे लगता है कि आप कई संख्या-अड्डों में धाराप्रवाह नहीं होने के लिए प्राप्त करते हैं।

यह सुनिश्चित करना हमेशा आसान और सुरक्षित है कि हमेशा 4-डॉट-क्वाड ("40q"? "क्वाडी-क्वाड"? "प्यारी-क्यू"?) पते का उपयोग करना सुनिश्चित करें।

तो आगे बढ़ो और कुछ संख्या अड्डों को सीखो। आप पार्टियों के जीवन को दिखाने और दिखाने में सक्षम होंगे, और जैसा कि वे कहते हैं, 10 प्रकार के लोग हैं: जो बाइनरी जानते हैं और जो नहीं करते हैं।

चलो भी नहीं सोच आईपीवी 6 पते के बारे में; मुझे लगता है कि वे 111 मुहरों में से एक हैं !!!


568
2017-10-12 17:06



Overcomplicating? प्रयोग बहुत उपयोगी हो सकता है, और इस मामले में एक अच्छा जवाब दिया; लेकिन सिद्धांत या दस्तावेज़ीकरण या मानकों के बिना, आप एक महत्वपूर्ण कारक गायब हो सकते हैं और इसे नहीं जानते। या आप यह निर्धारित कर सकते हैं कि एक विशेष संस्करण कैसे काम करता है और वहां 9 0% कार्यान्वयन के बारे में गलत है। या आप उन नियमों के साथ आ सकते हैं जो आपके प्रयोगों के परिणामों की व्याख्या करते हैं लेकिन इच्छित नियमों की तुलना में अधिक जटिल हैं। इस मामले में मुझे लगता है कि दस्तावेज के नियम (के लिए inet_aton()) एक सम्मान में सरल हैं - "255 से कम" के लिए कोई शर्त नहीं है। - LarsH
अरे देखो! कंप्यूटर साइंस का "विज्ञान" हिस्सा एक उपस्थिति बनाता है! (परिकल्पना, प्रयोग, सत्यापित) - Izkata
@ लार्सएच, हालांकि यह मेरा मुद्दा है, कि ping कमांड (कम से कम विंडोज़ पर) माइक्रोसॉफ्ट के कई कार्यक्रमों (विशेष रूप से कुख्यात) आईई की तरह है। यह बहुत क्षमा करने की कोशिश करता है और आप जो कुछ भी फेंकते हैं उसे लेते हैं और इसकी व्याख्या करने की कोशिश करते हैं। हां, आईपी पते प्रारूपों पर एक आधिकारिक दस्तावेज है, लेकिन यह आईएसओ और आरएफसी के बारे में कोई सवाल नहीं है, यह व्यावहारिक है, मैंने कुछ किया और यह अजीब है प्रश्न का उत्तर देने के बिना उत्तर दिया जा सकता है (स्वीकार्य रूप से लंबे, सूखे, उबाऊ तकनीकी विनिर्देश) - हालांकि ओपी उन्हें पढ़ना चाहता है तो उन्हें जोड़ने के लिए भी अच्छा है। - Synetech
0-प्रीफिक्स्ड ऑक्टल पार्सिंग पूरी तरह से त्याग दिया जाना चाहिए, के लिए बचाओ chmod। बस। ऑक्टेटल के लिए यह एकमात्र अपवाद है। अवधि। - James Dunne
यह आरजीबी हेक्स के लिए डीईसी रूपांतरण के लिए उपयोगी है। lol ~ C:\>ping 0xffffcc  Pinging 0.255.255.204 with 32 bytes of data: - wilson


इसके दो कारण हैं:

सबसे पहले, एक '0' उपसर्ग एक इंगित करता है अष्टभुजाकार नंबर। चूंकि ऑक्टेट (072) = डीसी (58), 1 9 2.168.072 = 1 9 2.168.58।

दूसरा, दूसरे से अंतिम 0 को आईपी पते से हटाया जा सकता है आशुलिपि। 127.0.1 को 127.0.0.1 के रूप में व्याख्या किया गया है, और आपके मामले में 1 9 2.168.58 को 1 9 2.168.0.58 के रूप में व्याख्या किया गया है।


147
2017-10-12 10:39



यह शून्य समूह नहीं है। यह वास्तव में प्रत्येक बिंदु को अगले बाइट सीमा से संबंधित विभाजक के रूप में मानता है। इस प्रकार, आईपी पते 2130706433 और 127.0.0.1 एक ही पते हैं। - Serge
32 बिट्स संख्याओं के लिए x.x.x.x नोटेशन का नाम है? यह अन्य डोमेन में उपयोग / सहायक हो सकता है लेकिन मैं इसे Google नहीं कर सकता :) संपादित करें: कभी नहीं, यह डॉट-दशमलव नोटेशन है - Guillaume86
आईपी ​​पते के मामले में यह अधिक सटीक रूप से क्वाड बिंदीदार नोटेशन है - Guillaume86
प्रसिद्ध अग्रणी शून्य एक बार और अधिक बार मारा गया है! - Luc M
अब यह असली जवाब है! - l--''''''---------''''''''''''


Octal नोटेशन के बारे में @ neu242 के महत्वपूर्ण बिंदु के अलावा, और अवलोकन कि आईपी पते को छोटा किया जा सकता है, अन्य महत्वपूर्ण टुकड़ा यह जान रहा है कि आईपी पते कितने छोटे हैं।

कोई यह अनुमान लगा सकता है कि अगर चार में से कुछ संख्याएं गायब हैं, तो पार्सर बाइट्स के अनुक्रम के अंत (या शुरुआत) पर शून्य से भरे बाइट जोड़ देगा। लेकिन यह ओपी की रिपोर्ट के व्यवहार से मेल नहीं खाता है: 1 9 2.168.072 को 1 9 2.168 के रूप में विश्लेषित किया गया था।058, 1 9 2.168.58 के रूप में नहीं।0, न ही 0.192.168.58।

स्पष्ट रूप से विंडोज और लिनक्स पिंग (आपके द्वारा किए गए संस्करण और जिन लोगों ने मैंने कोशिश की) आईपी एड्रेस तर्क को पार्स करने के लिए inet_aton () के बराबर कुछ का उपयोग करें। inet_aton के लिए मैन पेज ()कहते हैं:

The address supplied in cp can have one of the following forms:

 a.b.c.d   Each of the four numeric parts specifies a byte of the address; the
           bytes are assigned in left-to-right order to produce the binary
           address.

 a.b.c     Parts a and b specify the first two bytes of the binary address.
           Part c is interpreted as a 16-bit value that defines the rightmost
           two bytes of the binary address.  This notation is suitable for
           specifying (outmoded) Class B network addresses.

 a.b       Part a specifies the first byte of the binary address.  Part b is
           interpreted as a 24-bit value that defines the rightmost three bytes
           of the binary address.  This notation is suitable for specifying
           (outmoded) Class C network addresses.

 a         The value a is interpreted as a 32-bit value that is stored directly
            into the binary address without any byte rearrangement.

इसलिए यह अब आपके पास है... 192.168.072 a.b.c पैटर्न फिट बैठता है, इसलिए 072 (एक अंडाकार संख्या के रूप में पार्सिंग के बाद) को 16-बिट मान के रूप में व्याख्या किया गया था जो बाइनरी पते के दाएं 2 बाइट को परिभाषित करता है, इसके बराबर 0.58

उपर्युक्त नियम यह कहने के बराबर हैं कि यदि चार संख्याओं में से कोई भी गायब है, तो आवश्यक शून्य-भरे बाइट जोड़े गए हैं दिए गए अंतिम नंबर से ठीक पहले... अंत में नहीं और न ही बाइट की स्ट्रिंग की शुरुआत में। (अगर यह अंतिम संख्या 256 से कम है तो इसे इस तरह से व्यक्त करना काम करता है।)

ध्यान दें कि पिंग के नए संस्करण इस तरह के शॉर्टेंड की अनुमति नहीं दे सकते हैं, न ही ऑक्टल व्याख्या। Iputils के लिए 2010 स्रोत कोड (पिंग समेत) जो मैंने आईपी एड्रेस तर्क को पार्स करने के लिए inet_aton () के बजाय inet_pton () का उपयोग किया है। inet_pton () के लिए मैन पेजकहते हैं:

Inet_aton (3) और inet_addr (3) के विपरीत, inet_pton () IPv6 पते का समर्थन करता है। पर   दूसरी तरफ, inet_pton () केवल डॉटेड-दशमलव नोटेशन में आईपीवी 4 पते स्वीकार करता है,   जबकि inet_aton (3) और inet_addr (3) अधिक सामान्य की अनुमति देते हैं   संख्या-और-बिंदु नोटेशन (हेक्साडेसिमल और ऑक्टल संख्या प्रारूप, और   उन प्रारूपों को जिन्हें सभी चार बाइटों को स्पष्ट रूप से लिखा जाना आवश्यक नहीं है)।


98
2017-10-12 15:33



यह अब तक का सबसे अच्छा जवाब IMHO है। - Josh
विंडोज़ पर आप देख रहे हैं inet_addr विंसॉक में - user7116


आपको यह भी विचार करना होगा कि एक आईपी को उनकी स्थिति के महत्व में एक साथ जोड़े गए पूर्णांक द्वारा दर्शाया जा सकता है।

192.168.0.58 is :
  192 * 256^3
+ 168 * 256^2
+   0 * 256^1
+  58 * 256^0

यहां अच्छी बात है:

1 9 2.168.58 1 9 2.168.0.58 होगा क्योंकि

    0 * 256^1 
+  58 * 256^0 
=  58

1 9 2.1.110100106 भी 1 9 2.168.0.58 होगा

  168 * 256^2 
+   0 * 256^1 
+  58 * 256^0 
= 11010106

3232235578 भी 1 9 2.168.0.58 होगा

  192 * 256^3 
+ 168 * 256^2 
+   0 * 256^1 
+  58 * 256^0 
= 3232235578

25
2017-10-12 13:57



"1 9 2.168.56 1 9 2.168.0.56 होगा क्योंकि 0 * 256 ^ 1 + 58 * 256 ^ 0 = 58" क्या आप निश्चित हैं? आप उम्मीद करेंगे कि 168 को पहले मामले में 256 ^ 1 से गुणा किया जाएगा, और दूसरे मामले में 256 ^ 2 तक। इसी तरह 1 9 2 को 256 ^ 2 बनाम 256 ^ 3 से गुणा किया जाएगा। तो 1 9 2.168.56 केवल = 192.168.0.56 हो सकता है यदि अतिरिक्त नियम हैं, जैसे शून्यों को छोड़ना। - LarsH
@ लार्सएच, मुझे लगता है कि यहां क्या कहा जा रहा है यह है कि यह "सामान्य" गिनती के विपरीत बाएं से दाएं आधारित है, जहां हम 1 की जगह से सब कुछ आधार बनाते हैं। तो पहला बिंदु 256 ^ 3 से गुणा करने के लिए जो कुछ भी है, 256 ^ 2 से दूसरा, 256 तक तीसरा। यदि इसके बाईं ओर कोई बिंदु नहीं है तो यह जोड़ा गया है w / o 256 से गुणा ^ n। तो 1.2.3। (1.2.3.0) 1.2.3 (1.2.0.3) से अलग होगा, अगर मैं सही ढंग से समझता हूं। - iX3
@ iX3: यदि वह मामला था, तो "1 9 2.168.56 1 9 2.168.0.56 होगा" गलत होगा, क्योंकि पहले मामले में, 56 को 256 ^ 1 से गुणा किया जाएगा, जबकि दूसरे मामले में, 56 केवल गुणा किया जाएगा वाई 256 ^ 0। और ओपी के 1 9 2.168.072 को 1 9 2.168.58.0 के बजाय 192.168.58.0 के रूप में व्याख्या किया जाएगा। - LarsH
थोड़ा भ्रामक बात यह है कि पता है कि पते में 0 का तीसरा अंक है। इस पते पर विचार करें 1 9 2.168.1.56 3 अंक का फॉर्म 1 9 2.168.312 होगा क्योंकि 1 * 256 ^ 1 + 56 * 256 ^ 0 312 है - vesquam
डॉट्स केवल यह निर्धारित करने के लिए काम करते हैं कि कौन सी संख्या को 256 की शक्ति से गुणा किया जाना चाहिए। पार्सर पहले बिंदु की तलाश करता है, और इससे पहले 256 ^ 3 तक संख्या को गुणा करता है। दूसरे और तीसरे बिंदु के लिए दोहराएं, लेकिन क्रमशः 256 ^ 2 और 256 ^ 1 तक। फिर यह सभी परिणामों को एक साथ जोड़ता है (कुछ impl। इसके बजाए एक रनिंग कुल रख सकता है, हालांकि परिणाम वही है)। यदि उनमें से कोई भी बिंदु गुम है, तो यह गुणा नहीं करता है और केवल अंतिम संख्या को अंतिम कुल में जोड़ता है। यही कारण है कि 1.2.3. परिणामस्वरूप एक त्रुटि होती है, क्योंकि पार्सर को कुल जोड़ने के लिए अंतिम संख्या नहीं मिल सकती है। - Justin ᚅᚔᚈᚄᚒᚔ