piapia123
ja

IP 整数変換

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

IP アドレスと整数を双方向に変換します。`192.168.1.1` を入れれば整数表記が並び、`3232235777` を入れればアドレスが出ます。 なぜツールにする価値があるか。IP を整数で保存するのはデータベースの定石です —— 15 バイトではなく 4 バイトで済み、範囲検索もそのまま使えます。そのため、そういうテーブルを作った人は必ず同じ疑問に当たります:なぜ取り出すと負の数なのか。 答えは MySQL の `INT` 列が符号付きだからです。`192.168.1.1` は `-1062731519` として保存されます。そこで符号なしと符号付きを別々の行として並べています —— 符号付きの行は飾りではなく、多くの人が探しに来た答えそのものです。 ⚠️ 逆方向は推測しません:`-1` を入れると `255.255.255.255` に勝手に変換せずエラーにします。それがどのアドレスかは保存のしかた次第で、間違えると誤ったファイアウォール規則が出来上がります。 IPv6 は128 ビットとして正確に扱います(10 進数の行は長くなりますが、桁は落ちません)。通常の数値で 128 ビットを扱うと下位の桁が静かに消え、もっともらしいが食い違うアドレスが出ます。

機能

  • 双方向(IP → 整数 / 整数 → IP)、自動判別と手動指定の両方
  • 符号なしと符号付きを別の行に —— 「データベースでなぜ負になるのか」に直接答えます
  • ドット区切り・16 進数・2 進数(任意)を一度に
  • IPv4 マップ IPv6(`::ffff:192.168.1.1`)では埋め込まれた IPv4 も表示
  • 逆引き名(`1.1.168.192.in-addr.arpa`)
  • IPv6 は 128 ビット整数で正確に。128 ビットを超えたら剰余ではなくエラー
  • 負の数はエラーにし、2 の補数を勝手に推測しません
  • すべて端末内で計算します

使い方

  1. IP アドレスまたは整数を左側に貼り付けます
  2. 方向は自動判別されます。合わなければ手動で指定します
  3. 結果はすぐに表示され、各行を個別にコピーできます

よくある質問

データベースから取り出した IP が負の数なのはなぜですか?
その列が符号付き整数だからです。MySQL の `INT` は符号付き 32 ビットで、範囲は約 ±21 億。`192.168.1.1` の符号なし値は 3232235777 で正の上限を超えるため、2 の補数として `-1062731519` と表示されます。 データは壊れていません —— 同じビット列の別の読み方です。直すなら列を `INT UNSIGNED` にするか、読み出し時に `CAST` します。ここで両方の読み方を並べているのは、一目で突き合わせられるようにするためです。
IP を整数で保存する利点は?
容量(15 バイトが 4 バイトになり、インデックスも小さくなります)と、範囲検索の 2 つです。 後者のほうが実用的です。文字列だと「192.168.0.0/16 に属する全レコード」は `LIKE '192.168.%'` になり、`192.168.0.1.example.com` のようなものまで拾ってしまい、インデックスも効きません。整数なら `WHERE ip BETWEEN 3232235520 AND 3232301055` だけで、インデックスがそのまま使えます。
`-1` が変換できないのはなぜですか? 明らかに `255.255.255.255` です。
あなたの保存方式では確かにそうですが、このツールはどの方式かを知りません。同じ `-1` でも、符号付き 32 ビットなら `255.255.255.255`、符号なし 64 ビットなら `18446744073709551615`、任意精度ならさらに別の数になります。 IP を推測して間違えると、誤ったファイアウォール規則や、意図しない許可レコードにつながります。そこでここはエラーにし、符号なしと符号付きの両方を示します —— スキーマを見ればどちらか分かります。

関連ツール