IP・ネットワーク計算
ログの大きな整数はIPアドレス?数値から戻したい
使うツール
アクセスログやデータベースの列に、ドットで区切られたIPではなく大きな整数が入っていることがあります。数字だけでは機器番号にも見えますが、32ビットのIPv4アドレスを整数で保存した値かもしれません。IPアドレス数値変換なら、元の値を外部へ問い合わせず、通常表記との対応を確かめられます。ただし、大きな整数がすべてIPとは限りません。まず列の定義を確認し、読み方が分かった値を変換します。
整数をIPv4へ戻し、逆変換で照合する
3221225994
192.0.2.10
0xc000020aIPアドレス数値変換で数値から戻すアドレスの種類をIPv4にし、3221225994を入力します。出力は192.0.2.10です。次にそのIPを入力すると、整数3221225994と16進数0xc000020aが出ます。0x付きの16進数を入力しても同じIPへ戻ります。元の値と逆変換後の値が一致すれば、少なくともこの表記の往復では桁を失っていないと確認できます。
ここでは計算例のアドレスを使っており、接続先の稼働や所有者は調べていません。結果としてIP表記が得られても、その値が実際のアクセス元である証拠にはなりません。元のログに変換済みの値が入っていたのか、別の項目を誤って読んだのかは、データを作った側の仕様と合わせて判断します。
四つの数値を、256進の桁として読む
192 × 256³ + 0 × 256² + 2 × 256 + 10
= 3221225994
bytes: c0 00 02 0aIPv4の各部分は0〜255の1バイトです。このツールでは左側を大きい桁として整数へまとめます。文字列192、0、2、10を単に連結した1920210ではありません。ドットを消す操作と数値変換は違います。16進数なら1バイトが二桁なので、c0、00、02、0aというまとまりを見ると、元の四つの部分との対応が追いやすくなります。
IPの各部分に前後の意味を持つ独自形式や、区切りなしの短縮表記がある場合は、そのまま標準表記と考えません。数値として受け付けられたから正しいIPと判断するのではなく、入力元が符号なし整数なのか、四つのバイトなのか、文字列なのかを先に整理します。元データの型が分かると、桁の問題と形式の問題を分けて調べられます。
整数1だけでは、IPv4かIPv6かは分からない
1 → 0.0.0.1 (IPv4)
1 → ::1 (IPv6)
4294967295 → 255.255.255.255 (IPv4)数値を戻すときはアドレスの種類が必要です。1をIPv4で読むと0.0.0.1、IPv6で読むと::1です。大きい値ならIPv6だろうと推測するだけでは、小さいIPv6値を誤読します。ログに種類の列があるなら、その情報を残したまま変換します。種類を失った整数だけから、元のアドレスの意味を完全に復元できるわけではありません。
IPv4の上限は4294967295なので、それより大きい4294967296はIPv4として拒否されます。IPv6は128ビットですが、大きな数を別のソフトへ貼る途中で浮動小数点へ変換すると下位桁を失う可能性があります。整数の桁列として渡し、往復したときに一致するかを確認します。見やすい指数表記へ直した値を、そのまま正確なアドレスの代わりに使わないでください。
もっともらしい別のIPなら、バイト順を確認する
c0 00 02 0a → 192.0.2.10
0a 02 00 c0 → 10.2.0.192
0x0a0200c0 = 167903424生のメモリーやバイナリファイルから取り出した値は、保存時のバイト順が関係します。順序を逆にすると、同じ四バイトでも別のIPになります。このツールには元ファイルのバイト順を自動検出する機能はありません。読めるIPが出るまで順序を変えるのではなく、書き込んだプログラムの仕様や既知の一件と照合してください。
負数で記録されたIPv4も、符号付き32ビットの解釈が原因の場合があります。ただし、この画面は負数を符号なしIPv4へ自動補正しません。元の型が確認できた場合に限り、符号の解釈を別に整理します。負数がエラーコードである可能性まで捨てて、どんな値もIPへ変換する運用にしないでください。
変換できたことと、通信できることを分ける
IP表記が得られた後にサブネットとの包含関係を知りたいなら、IP包含・CIDR比較へ値を渡して計算できます。しかし、どちらの画面もDNS照会やポート接続、所在地の推測を行いません。数値として有効であること、範囲に入っていること、実際に到達できることは別の確認です。
調査結果には『元の整数、アドレスの種類、変換後の表記、逆変換の一致』を残します。バイト順や符号が未確認なら、その点も未確認と記載します。数字を読める形へ直すだけでもログの突合せは進みますが、元データの不明点を結果の見た目で埋めないことが大切です。