IPv4 アドレスと32ビット整数を相互変換する手順

このページは、ドット区切りの IPv4 アドレスを4つのオクテットが表す符号なし32ビット整数に変換し、その逆も行います。192.168.10.1 は 3232238081 になり、3232238081 は 192.168.10.1 に戻ります。

変換はブラウザーのタブ内で実行され、アドレスがサーバーへ送信されることはありません。有効なドット区切り IPv4 アドレス、または 0〜4294967295 の整数でない値は、誤った結果に変換されず、理由を示すメッセージとともに拒否されます。

  1. 入力欄に 192.168.10.1 のような IPv4 アドレス、または 3232238081 のような整数を入力するか貼り付けます。「サンプルを読み込む」を押すと 192.168.10.1 が入ります。
  2. アドレスを数値として読むには「IPv4 → 整数」、逆に戻すには「整数 → IPv4」を押します。入力内容から向きを推測しないため、ボタンは2つに分かれています。
  3. 2つ目の欄に結果が表示されます。桁区切りや詰め物のない10進整数、またはドット区切りのアドレスです。
  4. 「結果をコピー」で値をクリップボードにコピーし、「クリア」で両方の欄を空にしてやり直せます。
  5. 入力が拒否された場合は、ボタンの上に理由が表示されます。オクテットの数、オクテットの範囲、先頭の0、符号、小数点、指数、あるいは 0〜4294967295 の範囲外の値です。

変換の内容と、受け付けない入力

数値とアドレスが対応する理由

IPv4 アドレスは、4つの10進オクテットで表記される32ビットの数値です。値はネットワークバイト順で計算され、先頭のオクテットが最上位バイトになります。つまり 16,777,216(256³)倍、2番目が 65,536 倍、3番目が 256 倍、最後が1倍です。192.168.10.1 が 3232238081 になるのはこのためで、範囲の両端は 0.0.0.0 = 0、255.255.255.255 = 4294967295 になります。

データベースやネットワーク API がアドレスをこの形で保存するのは、1つの整数のほうが文字列より比較・並べ替え・インデックスに適しているからです。PHP の ip2long() と MySQL の INET_ATON() は、このページと同じ値を返します(このページを配信するサーバーで確認済み)。値は符号なしで、同じ32ビットを符号付き整数として読むと 128.0.0.0(2147483648)以降は負になります。

受け付ける入力と拒否する入力

アドレスには、ドットで区切った10進オクテットを4つ、それぞれ 0〜255 で先頭に0を付けずに入力する必要があります。192.168.010.1 は先頭の0でオクテットが曖昧になるため拒否されます。オクテットが3つ、5つ、文字が含まれる、値の中に空白がある場合も拒否されます。以前は 192.168.10.1.5 のような5オクテットを、最後の部分を黙って無視して受け付けていました。

整数には、符号・小数点・指数のない10進数字だけを入力します。-1、1.5、3.232238081e9 は拒否され、4294967295 を超える値も拒否されます。このページが変換するのは IPv4 のみです。::1 のような IPv6 アドレス、/24 のようなプレフィックス長、16進数や8進数の表記は変換せず、無効な入力として報告します。

結果の読み取りと再利用

出力は意図的に単純です。桁区切りのない10進整数か、先頭に0のないドット区切りアドレスなので、SQL や設定ファイル、コードにそのまま貼り付けられます。テキストを手で選択する代わりに「結果をコピー」を使います。コピーはブラウザー内で完結し、データの送信は不要です。

サーバーへ何も送信しないため、一度読み込めばネットワークが切れていても変換でき、同じ値は ip2long()、INET_ATON()、inet_aton() で確認できます。結果欄に保持される値は1つだけで、変換のたびに置き換わり、「クリア」で両方の欄が空になります。

最近使ったツール: