سؤال لماذا يقوم اختبار pinging 192.168.072 (نقطتان فقط) بإرجاع استجابة من 192.168.0.58؟


فاتني عن طريق الخطأ نقطة من عنوان IP وطباعتها 192.168.072.
لدهشتي أنا مرتبطة بجهاز على 192.168.0.58

إذا كنت بينغ 192.168.072 احصل على ردود من 192.168.0.58.

لماذا هذا؟


أنا على جهاز كمبيوتر يعمل بنظام Windows على مجال Windows.


إذا كنت بينغ 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
ومن المثير للاهتمام أن نفس الشيء يحدث بالضبط على نظام التشغيل Linux: ping 192.168.072 مطبوعات PING 192.168.072 (192.168.0.58) 56(84) bytes of data.[...]. - Mechanical snail
ما هو أكثر عشوائية هو أن لديك آلة في 192.168.0.58 للحصول على رد. ما هي احتمالات ذلك؟ - KronoS
@ KronoS إنه في الواقع ليس غريباً إذا كنت في مدرسة أو شبكة شركة. بعض خوادم DHCP ستعطي العناوين بترتيب متزايد وسيتم استخدام معظمها. - Taum
192.168.0.58 هو توقيت لي .. يمكن لجميع طلبات بينغ بطريقة أو بأخرى خرج خادم ؟! - iamserious


الأجوبة:


الجميع يضاعف الأمر مع RFCs ، فصول IP ، وهكذا. ببساطة قم بتشغيل بعض الاختبارات لمعرفة كيف ping يقوم الأمر بتوزيع مدخلات IP بواسطة المستخدم (إزالة القشرة الخارجية):

> 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 يسمح لك الأمر (في Windows) باستخدام تنسيقات عنوان IP مختلفة. يمكن تقسيم عنوان 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لن يعمل IP لأي منهما 0.74.125.226.4 أو 74.125.226.4.0).

يمكنك أيضًا استخدام التدوين السداسي العشري في كل من الشكل المنقط والرباعي ، ولكن يجب أن تقوم بتنسيقه عن طريق الانتظار المسبق 0x لكل ثمانية.


لذلك ، هناك العديد من الطرق لتمثيل عنوان IP (IPv4). يمكنك استخدام تنسيق مسطح أو منقّط رباعيًا (أو نقطي - نقطي أو مزدوج - أو منقط - أحادي) ، ولكل واحد ، يمكنك استخدام (أو حتى مزج ومطابقة) عشري ، ثماني ، وست عشري. على سبيل المثال ، يمكنك اختبار الاتصال 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 أذكياء بما يكفي للتعرف على ذلك وتفسيره على أنه عنوان URL (-al؟ -ic؟) بدلاً من عنوان IP رقمي.

(كشخص لديه العديد من تمدد الأوعية الدموية ونوبات قلبية يحاول كتابة رمز "بسيط" مفترض لاستيعاب العدد المفاجئ بشكل مضاعف من تباديل قيم البيانات ، أقدر أنه - يبدو - أن يعالج بشكل صحيح كل اختلافات المدخلات ؛ في هذا حالة ، على الأقل 31+32+33+34=120 الاختلافات.)

لذلك ، في حين تحدد 010.020.030.040 سوف بينغ 8.16.24.32 كما هو متوقع ، يمر 010.020.030.080 إلى ping سيتم التعامل معه على أنه عنوان URL بدلاً من عنوان IP - مثل foo.bar.baz.com التي يمكن (ولكن للأسف لا) موجودة. بمعنى آخر ، يحاول اختبار اتصال النطاق الفرعي 010 على النطاق الفرعي 020 على المجال 030 في نطاق المستوى الأعلى 080. لكن منذ 080 ليس TLD صالحًا (مثل .com، .net، ورفاقهم) ، فشل الاتصال الصحيح في الخطوة الأولى.

نفس الشيء يحدث مع 090.010.010.010 حيث يكون الحرف غير صالح في ثماني بتات مختلفة. بطريقة مماثلة، 0xf.0xf.0xf.0xf الأصوات 15.15.15.15، لكن 0xh1.0x1.0xg0.0f فشل.

حسنًا ، أعتقد أن هذا هو ما تحصل عليه لعدم التكلم بطلاقة في قواعد متعددة.

قد يكون من الأسهل والأكثر أمناً التأكد من استخدام عناوين 4-dotted-quad ("40q"؟ "quaddy-quad"؟ "cutie-q"؟) دائمًا.

لذلك اذهب اليها و تعلم بعض القواعد العدد. ستكون قادرًا على الظهور في حياة الأحزاب وتكون كما هي ، كما يقولون ، هناك 10 أنواع من الأشخاص: أولئك الذين يعرفون ثنائيًا وأولئك الذين لا يفعلون ذلك.

دعونا لا حتى يفكر حول عناوين IPv6 ؛ أعتقد أنها واحدة من الأختام 111!


568
2017-10-12 17:06



Overcomplicating؟ قد يكون التجريب مفيدًا جدًا ، وفي هذه الحالة أنتجت إجابة جيدة ؛ ولكن بدون نظرية أو وثائق أو معايير ، يمكن أن تضيع عاملًا مهمًا ولا تعرفه. أو يمكنك تحديد كيفية عمل إصدار معين ويكون خطأً حول 90٪ من عمليات التنفيذ. أو يمكنك التوصل إلى قواعد تشرح نتائج تجاربك ولكنها أكثر تعقيدًا من القواعد المقصودة. في هذه الحالة أعتقد أن قواعد الوثائق (ل inet_aton()) هي أبسط في إحترام واحد - لا شرطي ل "تحت / أكثر من 255". - LarsH
انظر! جزء "العلم" من علوم الكمبيوتر يجعل مظهر! (فرض ، تجربة ، تحقق) - Izkata
LarsH ، وهذا هو وجهة نظري رغم ذلك ، أن ping يشبه الأمر (على الأقل على نظام Windows) العديد من برامج Microsoft (وخاصةً برنامج IE). يحاول أن يكون متسامحًا للغاية ويأخذ أي شيء ترمي به ويحاول تفسيره. نعم ، هناك مستند رسمي على تنسيقات عنوان IP ، ولكن هذا ليس سؤالًا عن ISO و RFC ، إنه عملي ، لقد قمت بشيء وكان غريبًا السؤال الذي يمكن الإجابة عليه دون اللجوء إلى (المواصفات الفنية الطويلة والجافة والمثيرة للاعتراف) ، على الرغم من أن الارتباط بها في حالة رغبة OP في قراءتها أمر جيد أيضًا. - Synetech
يجب أن يتم التخلي تمامًا عن التحليل الثماني البادء ، باستثناء chmod. هذا هو. هذا هو الاستثناء الوحيد للثماني المسموح به. فترة. - James Dunne
من المفيد لـ RGB HEX لتحويل DEC. لول ~ C:\>ping 0xffffcc  Pinging 0.255.255.204 with 32 bytes of data: - wilson


هناك سببان لهذا:

أولاً ، تشير البادئة "0" إلى ثماني رقم. منذ oct (072) = ديسمبر (58) ، 192.168.072 = 192.168.58.

ثانيًا ، يمكن إسقاط الثانية - الأخيرة - الأخيرة من عناوين IP كـ اختزال. 127.0.1 يتم تفسيره على أنه 127.0.0.1 ، وفي حالتك يتم تفسير 192.168.58 كـ 192.168.0.58.


147
2017-10-12 10:39



لا تجمع الأصفار. في الواقع يعامل كل نقطة كفاصل المقابلة لحدود البايت التالي. وبالتالي ، فإن عناوين IP 2130706433 و 127.0.0.1 هي العناوين نفسها. - Serge
هل ترميز x.x.x.x لأرقام 32 بت له اسم؟ قد يكون من المفيد / المفيد في مجالات أخرى ولكن لا يمكنني google عليه :) edit: nevermind ، إنه الترميز العشري - Guillaume86
على نحو أكثر دقة هو الترقيم المنقط رباعية في حالة عنوان IP - Guillaume86
ضرب الصفر الرائد الشهير مرة أخرى! - Luc M
الآن هذه هي الإجابة الحقيقية! - l--''''''---------''''''''''''


بالإضافة إلى النقطة المهمة لـ @ neu242 حول التدوين الثماني ، وملاحظة أنه يمكن تقصير عناوين IP ، فإن الجزء المهم الآخر هو معرفة كيفية تفسير عناوين IP القصيرة.

قد يظن المرء بسذاجة أنه إذا كانت بعض الأرقام الأربعة مفقودة ، فإن المحلل اللغوي سيضيف البايتات المليئة صفر إلى النهاية (أو البداية) لتسلسل البايتات. ولكن هذا لا يتطابق مع السلوك الذي أبلغ عنه OP: تم تحليل 192.168.072 على أنه 192.168.058 ، وليس 192.168.58.0ولا 0.192.168.58.

يبدو أن Windows و Linux ping (الإصدار الذي جربته والأخرى التي حاولت استخدامها) يستخدمان شيئًا مساوًا لـ inet_aton () لتحليل وسيطة عنوان IP. ال صفحة man ل 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.)

لاحظ أن الإصدارات الأحدث من ping قد لا تسمح بهذا النوع من الاختزال ، ولا التفسير الثماني. ال كود مصدر 2010 ل iputils (بما في ذلك ping) التي وجدتها تستخدم inet_pton () بدلاً من inet_aton () لتحليل وسيطة عنوان IP. ال الصفحة رجل ل inet_pton ()يقول:

على عكس inet_aton (3) و inet_addr (3) ، inet_pton () يدعم عناوين IPv6. على   من ناحية أخرى ، يقبل inet_pton () عناوين IPv4 فقط في الترقيم العشري المنقط ،   في حين inet_aton (3) و inet_addr (3) تسمح أكثر عمومية   تدوين الأرقام والنقاط (تنسيقات الأرقام الست عشرية والثمانية ، و   التنسيقات التي لا تتطلب كتابة جميع وحدات البايت الأربع بشكل صريح).


98
2017-10-12 15:33



هذا هو أفضل إجابة IMHO. - Josh
على نظام التشغيل Windows الذي تبحث عنه inet_addr في Winsock. - user7116


يجب عليك أيضًا التفكير في أنه يمكن تمثيل عنوان IP بأعداد صحيحة تمت إضافتها معًا إلى موضعها.

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

25
2017-10-12 13:57



"سيكون 192.168.56 192.168.0.56 لأن 0 * 256 ^ 1 + 58 * 256 ^ 0 = 58" هل أنت متأكد؟ تتوقع أن يتم ضرب 168 في 256 ^ 1 في الحالة الأولى ، و 256 ^ 2 في الحالة الثانية. وبالمثل ، سيتم ضرب 192 في 256 ^ 2 مقابل 256 ^ 3. لذلك 192.168.56 يمكن أن = 192.168.0.56 فقط إذا كانت هناك قواعد إضافية في مكانها ، مثل إسقاط الأصفار. - LarsH
LarsH ، أعتقد أن ما يقال هنا هو أنه من اليسار إلى اليمين ، على عكس الحساب "العادي" حيث نقيم كل شيء من مكان واحد. لذا ، فإن النقطة الأولى تتسبب في ضرب كل ما يساوي 256 × 3 ، والثاني بـ 256 ^ 2 ، والثالث في 256. إذا لم يكن هناك نقطة على يسارها ، فستتضاعف مع 256 ^ ن. لذلك 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.58.0 بدلاً من 192.168.0.58. - LarsH
ما هو مضلل بعض الشيء هو حقيقة العنوان 0 لديه الرقم 3. خذ بعين الاعتبار هذا العنوان 192.168.1.56 النموذج المكوّن من 3 أرقام سيكون 192.168.312 لأن 1 * 256 ^ 1 + 56 * 256 ^ 0 هو 312 - vesquam
تعمل النقاط فقط على تحديد الأعداد التي يجب ضربها بقوة 256. حيث يبحث المحلل عن النقطة الأولى ، ويضرب الرقم قبله بـ 256 ^ 3. كرر النقطة الثانية والثالثة ، ولكن مع 256 ^ 2 و 256 ^ 1 ، على التوالي. ثم يضيف جميع النتائج معًا (قد تحتفظ بعض الأحرف الفارغة بإجمالي كلي ، على الرغم من أن النتيجة هي نفسها). إذا كانت أي من هذه النقاط مفقودة ، فهي ببساطة لا تقوم بعملية الضرب ، وتضيف فقط العدد النهائي إلى الإجمالي الجاري. هذا هو السبب أيضا 1.2.3. ينتج خطأ ، لأن المحلل لا يمكنه العثور على آخر رقم لإضافته إلى الإجمالي. - Justin ᚅᚔᚈᚄᚒᚔ