【備忘録】0埋めすると別物に!?IPアドレス表記の注意点まとめ

PC

皆さん、こんにちは!
上越市を拠点にし、「FA設備・装置開発」と「画像処理」に強い会社、NSIです!
私達は豊富な経験と専門知識で、各種業界の自動化・システム化のお手伝いをしています。

気温の高い日が続き、日に日に夏が近づいているのを感じます。
季節の変わり目、体調に気を付けていきましょう。

今回は「IPアドレス表記の注意点」についてまとめました。
ぜひご覧ください!

IPアドレスを0埋めすると「8」になる件

PingやプログラムでIPアドレス「192.168.0.010」と指定すると…。

010」と指定したはずなのに、なぜか「8」でpingが送信されています。

何が起きているの?

初めて見ると「あれ?」となるこの現象、実は昔のルールが影響しているんです。
昔のC言語には「先頭の文字で進数を決める」という暗黙のルールがありました。
このルールが未だに受け継がれているものについては、今も問題なく動いてしまいます。

  • 0から始まる … 8進数
  • 0xから始まる … 16進数
  • それ以外 … 10進数

このルールの厄介な部分が「オクテット単位で変換される」ことです。
一部だけが変わってしまうので、パッと見で気付きづらく見逃してしまいがちです。

オクテットとは?
「8 ビット(=1 バイト)で構成される 数値のひとかたまり」を指します。
IPアドレスは、32 ビット=8 ビット×4 オクテットで成り立っており、
例えば 192.168.0.1 の場合、「192」「168」「0」「1」の 4 つのオクテットとなります。

実害ってあるの?

一見、勝手に数字を書き替えてくれるだけに見えますが、実は大きな落とし穴があります。
例えばファイアウォールで「8.8.8.8 への通信は禁止!」と設定しても、同じアドレスを 010.010.010.010(=8.8.8.8) と書けば 別物扱いになり、あっさり通過してしまうことがあります。もちろん、最近の言語やブラウザ、OS では 8 進・16 進の変則表記を無効化する流れが進んでいますが、古い機器や設定ファイルが残っている環境では油断できません。そのため、よほど特別な理由がない限り、IPアドレスは10進数の4つ組(例:192.168.0.1)で書くのが安全です!

べんぞうくん
べんぞうくん

桁が揃ってきれいだからといって、0埋めすると後々トラブルに…。

色々な表記を試してみる

様々な表記でpingを実行したときの結果を見てみました。
実行環境は、Windows11のコマンドプロンプトです。

1. 8進数表記

前述でも記載したとおり、0から始まる数値は8進数と見なされます。

入力IP:010.010.010.010
出力IP:8.8.8.8

2. 16進数表記

0xから始まる数値は16進数と見なされます。

入力IP:0x7f.0x0.0x0.0x1
出力IP:127.0.0.1

3. 省略表記

先頭以降は桁が右詰めされるため、以下のように省略することも可能です。

入力IP:127.1
出力IP:127.0.0.1

4. 32bit整数表記

IPアドレスは、元々ただの整数であるため、以下のような表記も可能です。

入力IP:2130706433
出力IP:127.0.0.1

べんぞうくん
べんぞうくん

同じIPアドレスを意味していても様々な表記ができるんだね。

最後に

今回は IPアドレス表記の注意点 についてまとめました。
こんな表記方法もあるんだな~と、頭の隅に置いておいてもらえると幸いです。

ここまで読んでいただき、ありがとうございました。
ご質問・ご要望・ご相談などは、下記お問い合わせフォームからお気軽にご連絡ください。
http://www.net-nsi.co.jp/toiawase.html

べんぞうくん
べんぞうくん

この記事が役に立ったらGoodボタンを押してね~

タイトルとURLをコピーしました