0s ที่ขาดหายไปจะถูกเพิ่มในที่อยู่ IP โดยอัตโนมัติอย่างไร (`ping 10.5 'เทียบเท่ากับ` ping 10.0.0.5`)


36

ฉันพิมพ์โดยไม่ตั้งใจ

ssh 10.0.05

แทน

ssh 10.0.0.5

และรู้สึกประหลาดใจมากที่ใช้งานได้ ฉันยังพยายาม10.005และและผู้ที่ยังขยายตัวโดยอัตโนมัติ10.5 10.0.0.5ฉันยังพยายามและขยายไปสู่192.168.1 192.168.0.1ทั้งหมดนี้ยังทำงานได้pingดีกว่าsshดังนั้นฉันจึงสงสัยว่ามันจะใช้ได้กับคำสั่งอื่น ๆ ที่เชื่อมต่อกับโฮสต์ที่ผู้ใช้จัดหาเอง

ทำไมจึงใช้งานได้ พฤติกรรมนี้มีการบันทึกไว้ที่อื่นหรือไม่? พฤติกรรมนี้เป็นส่วนหนึ่งของ POSIX หรืออะไรบางอย่าง? หรือมันเป็นเพียงการใช้งานแปลก ๆ ? (ใช้ Ubuntu 13.10 สำหรับสิ่งที่คุ้มค่า)



คำตอบ:


43

ข้อความจากman 3 inet_aton:

   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.

   In all of the above forms, components of the dotted address can be
   specified in decimal, octal (with a leading 0), or hexadecimal, with
   a leading 0X).  Addresses in any of these forms are collectively
   termed IPV4 numbers-and-dots notation.  The form that uses exactly
   four decimal numbers is referred to as IPv4 dotted-decimal notation
   (or sometimes: IPv4 dotted-quad notation).

เพื่อความสนุกสนานลองสิ่งนี้:

$ nslookup unix.stackexchange.com
Non-authoritative answer:
Name:   unix.stackexchange.com
Address: 198.252.206.140

$ echo $(( (198 << 24) | (252 << 16) | (206 << 8) | 140 ))
3338456716

$ ping 3338456716         # What?  What did we ping just now?
PING stackoverflow.com (198.252.206.140): 48 data bytes
64 bytes from 198.252.206.140: icmp_seq=0 ttl=52 time=75.320 ms
64 bytes from 198.252.206.140: icmp_seq=1 ttl=52 time=76.966 ms
64 bytes from 198.252.206.140: icmp_seq=2 ttl=52 time=75.474 ms

2
ทำไมถึงมีวิธีที่มีประโยชน์มากกว่าในการแสดงที่อยู่ในเครือข่ายคลาส A, B, C ตัวอย่างเช่น 127.1 คือที่อยู่ลูปแบ็คในเครือข่ายลูปแบ็คระดับ A 127.0 / 8 ซึ่งประกอบด้วยที่อยู่จำนวน 16 ล้านที่อยู่ 127.0 ถึง 127.0xffffff และในเครือข่ายคลาส B 192.168.0 / 16 คุณจะมีที่อยู่ 192.168.1 ถึง 192.168.65534 ที่อยู่ INADDR_ANY คือที่อยู่0การเผยแพร่ DHCP 0xffffffff ซึ่งสั้นกว่าที่จะพิมพ์เป็นต้น
Stéphane Chazelas

4
ผู้ชายฉันต้องการให้ผู้ใช้ลองhttp: // 1249767214ก่อนถามคำถามง่าย ๆ เช่นนี้
blahdiblah

21

การเพิ่มคำตอบที่ดีของ @ devnullสามารถแสดงที่อยู่ IPv4 ด้วยวิธีต่อไปนี้

ตัวอย่าง

ชื่อโดเมนนี้google.comสามารถแสดงด้วยวิธีดังต่อไปนี้:

  • 74.125.226.4  (ทศนิยมแบบจุด)
  • 1249763844  (ทศนิยมทศนิยม)
  • 0112.0175.0342.0004  (จุดแปดด้าน)
  • 011237361004  (ฐานแปดแบน)
  • 0x4A.0x7D.0xE2.0x04  (hex จุดประ)
  • 0x4A7DE204  (ฐานสิบหกแบน)
  • 74.0175.0xe2.4  (ಠ_ಠ)

แหล่งที่มา: ทำไมการส่ง Ping ไป 192.168.072 (เพียง 2 จุด) ส่งคืนการตอบกลับจาก 192.168.0.58 .


3
การผสมเลขฐานแปดกับทศนิยมคืองานของปีศาจ
Nit

4
ชื่อโดเมนไม่ได้มีที่อยู่ IPv4
David Conrad

@DavidConrad - ฉันคิดว่ามันชัดเจนเพราะไม่ใช่ตัวเลข ทำให้ชัดเจนสำหรับผู้ที่ไม่ทราบ tihs
slm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.