欠落している0はIPアドレスに自動的に追加されますか?(「ping 10.0.0.5」に相当する「ping 10.5」)


36

誤って入力した

ssh 10.0.05

の代わりに

ssh 10.0.0.5

そして、それが機能したことに非常に驚きました。私も試しましたが10.00510.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は127.0 / 8クラスAループバックネットワークのループバックアドレスで、1600万個のアドレス127.0〜127.0xffffffで構成されています。また、192.168.0 / 16クラスBネットワークでは、通常、アドレス192.168.1から192.168.65534があります。INADDR_ANYアドレスは0、型に短いDHCPブロードキャストアドレスは0xffffffff、など
ステファンChazelas

4
男、私はユーザーがこのような簡単な質問をする前にhttp:// 1249767214を試すことを望みます。
blahdiblah

21

追加@ devnullの罰金の答えは、IPv4アドレスは、次の方法で表現することができます。

このドメイン名google.comは、次の方法で表すことができます。

  • 74.125.226.4  (ドット付き10進数)
  • 1249763844  (フラット10進数)
  • 0112.0175.0342.0004  (点線の8進数)
  • 011237361004  (平らな8進数)
  • 0x4A.0x7D.0xE2.0x04  (点線の16進数)
  • 0x4A7DE204  (平六角形)
  • 74.0175.0xe2.4  (ಠ_ಠ)

ソース:192.168.072(2つのドットのみ)にpingを実行すると、192.168.0.58から応答が返されるのはなぜですか?


3
8進数と10進数の混合は悪魔の仕事です。
NIT

4
ドメイン名は、いかなる意味でもIPv4アドレスではありません。
デビッドコンラッド14年

@DavidConrad-数値ではないので、それは一種の明白だと思いました。それを知らない人のためにそれをより明確にしました。
slm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.