LoginSignup
5
1

More than 5 years have passed since last update.

IPv4アドレスの xxx.xxx.xxx.xxx 形式ではない記法 (省略表記と誤解されることもありそうな)

Last updated at Posted at 2017-03-28

サマリ

ping 192.168.0.1 のつもりで、ping 192.168.1 と書いてしまっても意図通りに動き、192.168.0.1 = 192.168.1 と解釈される経験をした方も多いと思いますが、処理系(*BSD/macOS, Linux/glibc, Windowsなど)によってはIPv4アドレスの記法として

xxx.yyy.zzz.aaa (それぞれ 0〜255)

以外の表記を受け付ける。

記事のタイトルに省略記法と書いたが、正確にはクラスを意識した記法の名残で、短縮することを目的とした書き方ではない。また仕様で決められたものではなく実装依存。

以下 macOS 10.12, FreeBSD 11.0-RELEASE, Linux (Ubuntu 16.04)のglibc での動作。. (ドット)は必ずしも3つではなく、数値も10進数だけでなく16進数、8進数が混ぜて書けて、いくつか例を挙げると以下のようなものが許容される。

# ping 1 (0.0.0.1)
# ping 9999999999 (84.11.227.255)
# ping 0xFACEB00C (250.206.176.12)
# ping 10.65535 (10.0.255.255)
# ping 10.0xFF.0377 (10.0.255.255)
# ping 192.168.9999 (192.168.39.15)

. (ドット) なし。32ビット符号なし整数をべた書き

a # aの範囲は 0〜4294967295, 0x0〜0xFFFFFFFF(16進), 00〜077777777777(8進)

下記の例がこのルールに該当

# ping 1 (0.0.0.1)
# ping 9999999999 (84.11.227.255)
# ping 0xFFFFFFFF (255.255.255.255)

また、FreeBSD 11.0-RELEASE, macOS (10.12)の実装だと、32ビットを超える数を書いた場合は、下位32ビットのみが有効。例えば、こんな文字列でも有効なIPv4アドレス 192.168.0.1 として受け付けてしまう (Windows 10, Ubuntu 16.04のglibcは不可でした)。

# ping 0xFACEB00C000025DE0000FFFFFFFFFFFFFFFFFFFFFFFF0000000000C0A80001
# ping 1000000000000000000000000000000000000000000000000000003232235521

. (ドット) ひとつ。[8ビット符号なし整数].[24ビット符号なし整数]

クラスAのネットワーク部(8ビット) + ホスト部(24ビット)の表記を意図した記法

a.b # a: 0〜255, 0x0〜0xFF, 00〜0377 
    # b: 0〜16777215, 0x0〜0xFFFFFF, 00〜0377777777

10.65535 = 10.0.255.255
10.0xFFFFFF = 10.255.255.255

クラスを意識した記法とは書いたが a が128を超えても

172.16 = 172.0.0.16

と解釈される。

. (ドット) 2つ。[8ビット整数].[8ビット整数].[16ビット整数]

クラスBのネットワーク部(16ビット) + ホスト部(16ビット)の表記を意図した記法

a.b.c # a: 0〜255, 0x0〜0xFF, 00〜0377
      # b: 0〜255, 0x0〜0xFF, 00〜0377
      # c: 0〜65535, 0x0〜0xFFFF, 00〜0177777

172.16.1 = 172.16.0.1
192.168.256 = 192.168.1.0 (クラスCのアドレスでも可)

IPv4アドレスを含むIPv6アドレス (射影アドレス, 互換アドレスなど)

わざわざ試すまでもないが、Windows 10, Ubuntu 16.04 (Linux/glibc), FreeBSD 11.0-RELEASE, macOS Sierra (10.12)、どの実装でも、inet_pton(), getaddrinfo() は省略表記を受け付けない。

NG ::ffff:10.1
NG ::ffff:0xFF.0xFF.0xFF.0xFF
NG ::127.1
NG ::10.0.0.0xFF
NG fe80::172.16.65530

まとめ

この記法を使う場面はたぶん、もうないと思う。ちなみにガラケーの時代にはURL(ホスト名)の入力を簡単にするため、long IPと呼ばれる、ネットワークバイトオーダ32ビットべた書きの表記を使う人もいたようだが、もはや意味はない。

■窓の杜 NEWS 2004/07/07
URLを携帯電話で入力しやすい9~10桁の数字に変換できる「LongIPmaker」が公開
http://forest.watch.impress.co.jp/article/2004/07/07/longipmaker.html

参考文献

日本語の wikipedia の「IPアドレス」の項目にも詳しく書いてあります
[1] https://ja.wikipedia.org/wiki/IPアドレス#表記

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1