IPv6アドレス展開
短縮されたIPv6アドレスを貼り付けると、完全な形が分かります。2001:db8::1は2001:0db8:0000:0000:0000:0000:0000:0001になり、省略されたゼロのグループが戻って、8つのグループがすべて4桁にそろいます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- アドレス
- 2001:db8::1
- 展開後
- 2001:0db8:0000:0000:0000:0000:0000:0001
- グループ数
- 8
圧縮されたIPv6アドレスは、連続するゼロのhextet列を二重コロンでまとめ、各グループ内の先頭ゼロを落とします。人には読みやすい一方、厳密な文字列比較、表計算の結合、ファイアウォール規則の差分、ログ分析には不便です。このIPv6アドレス展開ツールは、圧縮形・部分省略形・すでに完全なアドレスを受け取り、省略されたゼログループをすべて復元し、8つのhextetそれぞれを16進4桁に埋めます。結果は並べ替え・ハッシュ・ツール間のバイト一致に使える安定した正規の完全形です。
8グループ完全形の意味と展開が役立つ理由
IPv6アドレスは128ビットを、コロンで区切った16ビットのグループ8つで書き、各グループは1〜4桁の16進数で示します。RFC 5952は圧縮を許します。連続する全ゼログループの1連だけを二重コロンに置き換えられ、グループ内の先頭ゼロも省略できます。
この柔軟さにより、同じアドレスに 2001:db8::1、2001:0db8:0:0:0:0:0:1、完全埋め込み形など複数の正しい表記が生まれます。設定ファイルを通常の文字列等価で比較したり、アドレス文字列をマップ・キャッシュ・アクセス制御リストのキーにしたりすると、回線上では同じでも表記が違って見えます。
すべてのアドレスをゼロ埋めした8つのhextetに展開すれば、その曖昧さは消えます。展開処理は入力を走査し、二重コロンは最大1回まで探し、その左右に書かれたhextet数を数え、合計がちょうど8になるよう欠けた全ゼログループを挿入し、各hextetを小文字4桁まで左詰めします。
したがって展開後の文字列は、ゾーンIDのない純粋なIPv6表記の中でそのアドレス値に対して一意であり、各hextet境界内では辞書順と数値順が揃い、デュアルスタック在庫レポートの突合も容易になります。
IPv6アドレス展開が実際に役立つ場面
ネットワーク自動化とインフラストラクチャ as コードのパイプラインは、Terraform・Ansible・ファイアウォールオブジェクトを書き出す前にすべてのIPv6リテラルを正規化し、誰かがアドレスを再省略しても plan の差分が揺れないようにします。
クラウドとデータセンターの在庫ツールは、異なる省略スタイルで届くVM・ロードバランサ・DNSレコードを1つのホストキーに結合します。教室や資格の実習では、無料の展開ツールで、教科書が圧縮形の横に示す完全形と宿題を突き合わせられます。検証失敗は残高を消費しません。
活用例
IaCとファイアウォール設定の正規化
Terraform・Ansible・ACLファイル内のIPv6リテラルをすべてゼロ埋め8グループに展開し、無害な省略差で文字列差分やポリシー統合が失敗しないようにします。
在庫とデュアルスタックホストマップ
異なる圧縮スタイルでIPv6を保存するクラウド・DNS・ロードバランサの記録を、1つの安定したホストアドレスキーの下に結合します。
よくある質問
圧縮IPv6アドレスを完全形に展開するには?
アドレス文字列(例:2001:db8::1)を送ってください。
すでに完全なアドレスも受け付けますか?
はい。 完全に書かれたアドレスも再検証し、小文字4桁のhextetに再埋めするので、成功経路はどれも同じ形になります。
%eth0 のようなゾーン識別子は使えますか?
いいえ。 ゾーン接尾辞のない素のIPv6アドレスを指定してください。
::ffff:192.0.2.1 のようなIPv4マップアドレスは?
埋め込みIPv4末尾は2つの16進hextetに変換され、その後8グループの完全展開形が返されます。素のIPv4だけは拒否されます。
比較の前にIPv6アドレスを展開するのはなぜですか?
同じアドレスにいくつもの正しい書き方があるためです。2001:db8::1と2001:0db8:0:0:0:0:0:1は同じアドレスですが、文字列として比べると別物に見えます。完全な形は1つに決まるので、一覧や記録が正確に一致します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/ipv6-expand \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"2001:db8::1"}'const res = await fetch("https://api.kit.forhosting.com/dev/ipv6-expand", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"address": "2001:db8::1"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/ipv6-expand",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"address": "2001:db8::1"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/ipv6-expand", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"address":"2001:db8::1"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"address":"2001:db8::1"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/ipv6-expand", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"address": "2001:db8::1"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.ipv6_expand",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
アドレスを囲む任意の角括弧は除去され、ゾーン識別子と素のIPv4文字列は明確なinvalid_inputで拒否されます。
入力契約・応答の形・エラー時の挙動
値は二重コロンで圧縮されていても、任意のhextetで先頭ゼロを省略していても、すでに完全展開されていても、URLホスト形のように角括弧で囲まれていても構いません。コロン-ffff-コロンに続くドット付き4つ組のような埋め込みIPv4末尾は、埋め込みの前に2つの16進hextetへ変換されます。必須の文字列フィールド address を1つ含むJSON本体をPOSTしてください(別名 ip、ipv6、text も受け付けます)。成功時は、トリムした元アドレス、8グループのコロン区切り文字列 expanded、小文字4桁の文字列8個の配列 groups、入力が二重コロンまたは短いhextetを使った場合に true となる was_compressed、常に8の group_count を返します。address の欠落や空、非文字列型、二重コロンが2回以上、圧縮なしの空hextet、非16進文字、パーセント記号の後のゾーン識別子、素のIPv4、グループ数の誤りはすべて invalid_input で失敗し課金されません。例:address 2001:db8::1 は was_compressed true で 2001:0db8:0000:0000:0000:0000:0000:0001 に展開されます。例:address ::1 は 0000:0000:0000:0000:0000:0000:0000:0001 になります。expanded フィールドをご自身の等価検査と組み合わせるか正規化列として保存してください。このエンドポイントはDNS・地理位置・接続性試験は行いません。
IPv6アドレス展開が実際に役立つ場面
セキュリティとSIEMのパイプラインは、複数ベンダーのログの送信元・宛先フィールドを展開し、圧縮バリエーションのライブラリを抱えずに単一の正規文字列で相関ルールを一致させます。実装は純粋な parse の tier A のため、成功した呼び出しは毎回公開の基本料金 $0.002 のみで、モデルトークンも外向き通信もありません。リクエストはアドレス文字列1本に保ち、展開値をテストに固定すれば、自前で本格的なIPアドレスライブラリを立てなくても、CI・エッジワーカー・運用ランブック向けに再現可能な完全形IPv6テキストが得られます。
連携の活用例
SIEMとログ相関のキー
複数ベンダーのログフィールドを1つの展開形に正規化してから、アラートの重複排除やコレクタ間のフロー結合を行います。
技術的な質問
IPv6アドレス展開の料金は?
ブラウザツールは無料です。APIリクエストは成功1回あたり $0.002 のKIT前払い残高を使い、無効な入力は課金されません。