2007 年 10 月 16 日

Windows の127.0.0.1 の省略形 127.1 などは何のために存在しているのか

ふとしたきっかけで、Windows の IP アドレスって省略できることに気付きました。192.168.0.1 は 192.168.1 に省略できるし、タイトルにあるように、127.0.0.1 は 127.1 に省略することができます。何のために存在する機能なのでしょう。
良い機会なので、IP アドレスの省略について調べてみました。
IPv4 では、10 進数だけでなく 8 進数や 16 進数を混在させることができます。同時に、無駄なゼロをつけても機能するようになっており、一つの IP アドレスでも、無数のアドレスを作り出すことができます。
ITmedia News:8進数や16進数で検出回避する新手のスパム

このリンクは実際にはIPアドレスを示すものだが、10進数だけでなく8進数、16進数を混ぜ合わせた上に多数の0を付け加えて、数字を意図的に分かりにくくしてあった。
このやり方で、例えばMcAfeeが運営するAvert LabsのIPアドレス(http://205.227.136.116)を表示すると、

http://0x00000cd.227.0000000000000000210.0×000000000074

といったURLが作成でき、クリックするとAvert Labsのサイトにつながる。

IPv6 では、連続する 0 を省略することができるような仕様になっています。ただし、この場合も、省略できるのは一か所だけです。1080 : 0 : 0 : 0 : 8 : 800 : 200C : 417A が 1080 : : 8 : 800 : 200C : 417A になるって感じです。
で、本題の上記の件ですが、Wikipedia に答がありました。

gethostbyname()やinet_aton()など、IPアドレスを解釈する実装の一部では、以下のような表記も許している。
* 数字が3組のときは、3番目は16ビットと解釈される。
o (例)192.168.1 (= 192.168.0.1)
* 数字が2組のときは、2組目は24ビットと解釈される。
o (例)192.11010049 (= 192.168.0.1、(168×256+0)×256+1=11010049)
* ドットがないときは、単一の32ビット数と解釈される。ロングIPアドレスなどとも呼ばれる。
o (例)3232235521 (= 192.168.0.1、((192×256+168)×256+0)×256+1=3232235521)
* 各数字は0xを前置すると16進数、0を前置すると8進と解釈される。
o (例)0xC0A80001 (= 192.168.0.1)
o (例)0xC0.0250.1 (= 192.168.0.1、(0xC0=192, 0250=168))
これらの表記はRFC等で規定されておらず(RFC3986を参照のこと)、オペレーティングシステム (OS) やアプリケーション(例:Webブラウザソフト)、ネットワーク機器等によっては利用できないことがある。 また、悪意のある者がフィッシングサイトなどのURLを偽装するために用いる場合もあるので、注意が必要である。

とのことです。

| コメントは受け付けていません。 | etc...