北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

クラスBのプライベートIPって覚えてるもん?

プライベートIPアドレスをはじく正規表現を書いてみたんだけど、なんか自信がなかったわけです。

die "detect private ip: $ip" if $ip =~ /^(192\.168|10\.|172\.(1[6-9]|2[0-9]|3[01])\.)/;

クラスBのプライベートIP*1って、こんなややこしいんだっけ?? あまりに自信なかったせいでGoogle code searchしちゃいました。結論としては、SpamAssassinでも同じことやってるみたいだから、問題なさそうです。

Mail::SpamAssasin::Constantsより。

use constant IP_PRIVATE => qr{^(?:
  10|				   # 10/8:             Private Use (3330)
  127|				   # 127/8:            Private Use (localhost)
  169\.254|			   # 169.254/16:       Private Use (APIPA)
  172\.(?:1[6-9]|2[0-9]|3[01])|	   # 172.16-172.31/16: Private Use (3330)
  192\.168			   # 192.168/16:       Private Use (3330)
)\.}ox;

localhostはともかく、APIPAってなんだっけ? とググってみたら、こんな話だそうで。へー。

今日のまとめ

RFC的にはこれですね。

*1:172.16.0.0/12、が答え。