पिंगिंग 192.168.072 (केवल 2 डॉट्स) 192.168.0.58 से प्रतिक्रिया क्यों देता है?


379

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

अगर मैं पिंग करता 192.168.072हूं तो मुझे प्रतिक्रियाएं मिलती हैं 192.168.0.58

ऐसा क्यों है?


मैं विंडोज डोमेन पर विंडोज पीसी पर हूं।


अगर मैं पिंग 192.168.72मैं से प्रतिसाद प्राप्त 192.168.0.72है, तो ऐसा लगता है 0में 072(अपने मूल गलती में) महत्वपूर्ण है।


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



2
दिलचस्प है, ठीक यही बात लिनक्स पर भी होती है: ping 192.168.072प्रिंट PING 192.168.072 (192.168.0.58) 56(84) bytes of data.[...]।
मैकेनिकल घोंघा

9
क्या अधिक यादृच्छिक है कि आपके पास 192.168.0.58प्रतिक्रिया प्राप्त करने के लिए एक मशीन थी । उसमें विचित्र क्या है?
जेम्स मेर्टज़

3
अगर आप स्कूल या कंपनी के नेटवर्क पर हैं तो @KronoS वास्तव में इतना अजीब नहीं है। कुछ डीएचसीपी सर्वर बढ़ते क्रम में एड्रेस देंगे और उनमें से ज्यादातर का उपयोग किया जाएगा।
ताउम्र

5
192.168.0.58मेरे लिए समय निकल रहा है .. क्या सभी पिंग अनुरोधों ने किसी भी तरह सर्वर खटखटाया है?!
Iamserious 10

जवाबों:


570

हर कोई इसे RFC, IP क्लासेस, और इस तरह से अधिक जटिल कर रहा है। केवल यह देखने के लिए कुछ परीक्षण चलाएं कि 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कमांड (विंडोज में) आपको अलग-अलग आईपी एड्रेस फॉर्मेट का उपयोग करने की अनुमति देता है। एक IPv4 एड्रेस चार भागों ( "डॉटेड-ट्रैक्टर") के रूप में तो में टूट जा सकता है: 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कमांड इनपुट के लिए इस तरह के विभिन्न प्रकारों के लिए अनुमति देता है और देखे गए तरीकों में गैर-मानक प्रारूपों की व्याख्या करता है, इसका मतलब यह नहीं है कि आप हर जगह ऐसे प्रारूपों का उपयोग कर सकते हैं। कुछ कार्यक्रम आपको डॉटेड-क्वाड के सभी चार भागों को प्रदान करने के लिए बाध्य कर सकते हैं, अन्य लोग दशमलव और ऑक्टल को मिश्रण और मिलान करने की अनुमति नहीं दे सकते हैं, और इसी तरह।

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


परिशिष्ट :

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

(जैसा कि कई अनियिरिज्म और दिल का दौरा पड़ने वाला व्यक्ति है, जो डेटा मानों के क्रमपरिवर्तन के विस्फोट की संख्या को समायोजित करने के लिए कथित तौर पर "सरल" कोड लिखने की कोशिश कर रहा है, मैं इस बात की सराहना करता हूं कि - यह इनपुट बदलावों के सभी को सही ढंग से संसाधित करता है; मामला, कम से कम 3 1 +3 2 +3 3 +3 4 = 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 प्रकार के लोग हैं: वे जो द्विआधारी जानते हैं और जो नहीं जानते हैं।

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


39
Overcomplicating? प्रयोग बहुत उपयोगी हो सकता है, और इस मामले में एक अच्छा जवाब दिया; लेकिन एक सिद्धांत या प्रलेखन या मानकों के बिना, आप एक महत्वपूर्ण कारक को याद कर सकते हैं और इसे नहीं जान सकते हैं। या आप यह निर्धारित कर सकते हैं कि एक विशेष संस्करण कैसे काम करता है और वहां से 90% कार्यान्वयन के बारे में गलत है। या आप ऐसे नियमों के साथ आ सकते हैं जो आपके प्रयोगों के परिणामों की व्याख्या करते हैं लेकिन इच्छित नियमों की तुलना में अधिक जटिल हैं। इस मामले में मुझे लगता है कि दस्तावेज़ के नियम (के लिए inet_aton()) एक सम्मान में सरल हैं - "अंडर / 255 से अधिक" के लिए कोई शर्त नहीं।
लार्क्स

71
अरे देखो! कंप्यूटर विज्ञान का "विज्ञान" भाग एक उपस्थिति बनाता है! (परिकल्पना, प्रयोग, सत्यापन)
१२:२० पर इजाकाटा

13
@ लार्स, यह मेरी बात है, हालांकि, यह pingकमांड (कम से कम विंडोज पर) माइक्रोसॉफ्ट के कई कार्यक्रमों (विशेष रूप से कुख्यात) IE की तरह है। यह बहुत क्षमाशील होने की कोशिश करता है और आपके द्वारा फेंकी गई किसी भी चीज को ले जाता है और उसकी व्याख्या करने की कोशिश करता है। हां, आईपी एड्रेस फॉर्मेट पर एक आधिकारिक दस्तावेज है, लेकिन यह आईएसओ और आरएफसी के बारे में कोई सवाल नहीं है, यह व्यावहारिक है, मैंने कुछ किया है और यह अजीब सवाल है, जिसका उत्तर बिना (आमतौर पर लंबे, सूखे, उबाऊ) के बिना दिया जा सकता है। तकनीकी विनिर्देश) - हालांकि ओपी उन्हें पढ़ना चाहता है, तो उन्हें जोड़ना भी अच्छा है।
सिनटेक १।

6
0-पूर्वनिर्मित ऑक्टल पार्सिंग को पूरी तरह से छोड़ दिया जाना चाहिए, के लिए सहेजें chmod। बस। ऑक्टल के लिए यही एकमात्र अपवाद है। अवधि।
जेम्स ड्यूनी

6
यह RGB HEX से DEC रूपांतरण के लिए उपयोगी है। lol ~C:\>ping 0xffffcc Pinging 0.255.255.204 with 32 bytes of data:
विल्सन

147

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

सबसे पहले, एक '0' उपसर्ग एक अष्टक संख्या को इंगित करता है । चूंकि अक्टूबर (072) = दशांश (58), 192.168.072 = 192.168.58।

दूसरा, दूसरे से अंतिम 0 को आईपी पते से शॉर्टहैंड के रूप में छोड़ा जा सकता है । 127.0.1 की व्याख्या 127.0.0.1 के रूप में की जाती है, और आपके मामले में 192.168.58 की व्याख्या 192.168.58 के रूप में की जाती है।


7
यह समूह शून्य नहीं करता है। यह वास्तव में प्रत्येक डॉट को अगली बाइट सीमा के अनुरूप विभाजक के रूप में मानता है। इस प्रकार, आईपी पते 2130706433 और 127.0.0.1 समान पते हैं।
सर्ज

2
अधिक प्राथमिक रूप से यह एक आईपी पते के मामले में क्वाड डॉटेड नोटेशन है
Guillaume86

4
प्रसिद्ध अग्रणी शून्य ने एक बार फिर से हिट किया है!
ल्यूक एम

2
अब यह असली जवाब है!
l -''''''--------- '' '' '' '' '' ''

2
यह उत्तर गलत और भ्रामक है। 0 को 1.0.2.3 (1.2.3) में छोड़ने से एक अलग आईपी पता (1.2.0.3) मिलता है।
sch

101

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

कोई भी भोलेपन से यह अनुमान लगा सकता है कि यदि चार संख्याओं में से कुछ गायब हैं, तो पार्सर बाइट्स के अनुक्रम के अंत (या शुरुआत) में शून्य-भरा बाइट्स जोड़ देगा। लेकिन यह ओपी द्वारा बताए गए व्यवहार से मेल नहीं खाता: 192.168.072 192.168 के रूप में पार्स किया गया। 0 .58, 192.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एबीसी पैटर्न फिट बैठता है, इसलिए 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 () केवल बिंदीदार-दशमलव संकेतन में IPv4 पतों को स्वीकार करता है, जबकि inet_aton (3) और inet_addr (3) अधिक सामान्य संख्याओं और डॉट्स संकेतन (हेक्साडेसिमल और ऑक्टल संख्या स्वरूपों की अनुमति देता है, और जो प्रारूप 'डॉन' को स्वीकार नहीं करते हैं) t सभी चार बाइट्स को स्पष्ट रूप से लिखा जाना चाहिए)।


12
यह अब तक का सबसे अच्छा जवाब IMHO है।
जोश

Windows पर आप inet_addrWinsock में
user7116

24

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

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

यहां है ठंडी बात:

192.168.58 192.168.0.58 होगा क्योंकि

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

192.11010106 भी 192.168.0.58 होगा

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

3232235578 भी 192.168.0.58 होगा

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

1
"192.168.56 192.168.0.56 होगा क्योंकि 0 * 256 ^ 1 + 58 * 256 ^ 0 = 58" क्या आप सुनिश्चित हैं? आप पहले मामले में 168 ^ 1 से गुणा करने की उम्मीद करेंगे, और दूसरे मामले में 256 ^ 2 से गुणा करेंगे। इसी तरह 192 को 256 ^ 2 बनाम 256 ^ 3 से गुणा किया जाएगा। तो 192.168.56 केवल = 192.168.0.56 हो सकता है अगर जगह में अतिरिक्त नियम हैं, जैसे कि शून्य को छोड़ना।
लार्स

@ लार्स, मुझे लगता है कि यहां जो कहा जा रहा है वह यह है कि यह "सामान्य" गिनती के विपरीत बाएं से दाएं आधारित है, जहां हम 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: अगर ऐसा होता, तो "192.168.56 192.168.0.56 होगा" गलत होगा, क्योंकि पहले मामले में, 56 को 256 ^ 1 से गुणा किया जाएगा, जबकि दूसरे मामले में, 56 केवल गुणा किया जाएगा y 256 ^ 0। और ओपी के 192.168.072 की व्याख्या 192.168.0.58 के बजाय 192.168.58.0 होगी।
लार्स

थोड़ा भ्रामक है तथ्य यह है कि पते में 0 अंक 3 अंक है। इस पते पर विचार करें १
२.१६.1.१.५६

1
डॉट्स केवल डिलिनेट करने के लिए कार्य करते हैं कि कौन सी संख्या को 256 की शक्ति से गुणा किया जाना चाहिए। पार्सर पहले डॉट के लिए दिखता है, और संख्या को 256 ^ 3 से पहले गुणा करता है। 2nd और 3rd dot के लिए दोहराएं, लेकिन क्रमशः 256 ^ 2 और 256 ^ 1 तक। फिर यह सभी परिणामों को एक साथ जोड़ता है (कुछ निहित है, इसके बजाय एक कुल चल सकता है, हालांकि परिणाम समान है)। यदि उनमें से कोई भी डॉट्स गायब हैं, तो यह केवल गुणा नहीं करता है और केवल अंतिम संख्या को रनिंग टोटल में जोड़ता है। यही कारण है कि 1.2.3.एक त्रुटि के परिणामस्वरूप, क्योंकि पार्सर कुल में जोड़ने के लिए अंतिम संख्या नहीं पा सकता है।
जस्टिन ᚅᚔᚈᚄᚒᚔ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.