IPv6めも

IPv6アドレスの正規化

RFC5952(A Recommendation for IPv6 Address Text Representation)にて定義されている。

http://www.slideshare.net/koyhoge/ipv6php

に分かり易いスライドがある。 これによると以下の通りの実装となる。

  • フィールド内の0省略
  • 各フィールドの"0"は省略できる 2001:0db8 -> 2001:db8
  • "::"による省略
    • 0000を::で省略できる
    • 連続した0000は::で省略できる
    • 「一番省略できる」ところを省略すること
    • 2か所以上あるなら一番前の方を省略
  • 大文字小文字?
    • 小文字

how to IPv6アドレスのプレーン化

#php -r "echo bin2hex(inet_pton('ff02::1'));"
ff020000000000000000000000000001

ipv6calcを使いIPv6アドレスをplain表示/正規化する

 ipv6calc --showinfo -q -m 2001:db8::1 | grep "^IPV.=" | cut -d '=' -f2
 > 2001:0db8:0000:0000:0000:0000:0000:0001
 ipv6calc --showinfo -q -m 192.168.0.1 | grep "^IPV.=" | cut -d '=' -f2
 > 192.168.0.1
 ipv6calc -q 2001:db8::1
 > 2001:db8::1
 ipv6calc -q 2001:0db8:0000:0000:0000:0000:0000:0001
 > 2001:db8::1
 ipv6calc -q 192.168.000.1