IP範囲をCIDRに変換
開始と終了のIPv4アドレスを入れると、その範囲だけをぴったり覆う最少のCIDRブロックが分かります。192.168.1.13から192.168.1.20なら4つのブロックになり、漏れも隣へのはみ出しもありません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 開始IP
- 192.168.1.13
- End ip
- 192.168.1.20
- 開始(整数)
- 3,232,235,789
- 終了(整数)
- 3,232,235,796
- アドレス数
- 8
- CIDRの数
- 4
ファイアウォール、クラウドのセキュリティグループ、BGP広告は、任意の開始・終了IPv4ペアをほとんど受け付けません。必要なのはCIDRプレフィックス、つまりアドレス/プレフィックス長で書く2のべき乗のまとまったブロックです。192.168.1.13から192.168.1.20のような人間向けの範囲を、欠けも隣へのはみ出しもなくちょうどそのアドレスだけを覆う最小のCIDR集合へ変えるのは、ネットワーク運用の定番作業です。このIP範囲→CIDR変換は決定的な貪欲法で行います。範囲の下端から、残りの区間に収まる最大の整列済みブロックを繰り返し出力します。フラットなCIDR文字列一覧、ブロックごとの先頭・末尾アドレス、サイズ、ホスト総数が得られます。
最小かつ厳密なCIDR被覆の意味
CIDRブロックは、長さが2のべき乗で、先頭アドレスがその長さに整列した連続アドレス列です。プレフィックスpのときブロックサイズは2の(32−p)乗で、ネットワークアドレスはそのサイズで割り切れなければなりません。無駄を許せば範囲をCIDRで覆うのは簡単で、大きすぎるスーパーネット1つで足りますが、許可リストでは危険で拒否リストでは無駄になります。
厳密被覆とは、出力ブロックの和集合が元の範囲と集合として一致すること、すなわち範囲内の各アドレスがちょうど1ブロックに現れ、範囲外は一切現れないことです。最小とはそうしたブロックの数が最も少ないことであり、標準の貪欲法は現在の左端で常に最大の合法ブロックを取ることで達成します。
例えば192.168.1.13から192.168.1.20の8アドレスは4プレフィックスになります。.13のホストルート、.14–.15の/31、.16–.19の/30、.20のホストルートです。単一の/29は.16から.23まで届きはみ出しますし、/28はさらに悪いです。本変換はプライベート網の前提を持ち込みません。
公開・プライベート・マルチキャスト・ループバックはすべて素の32ビット整数として扱い、RFC1918、CGNAT、公開空間でも同じ論理が働きます。
活用例
ファイアウォールとACLの作成
パートナー提供のIPv4開始〜終了を、ファイアウォール・セキュリティグループ・ルータACLが実際に受け付ける最小CIDR一覧へ変換します。
IaCとCI
表計算やCMDBのアドレス範囲を、決定的なパイプライン工程でTerraform・Ansible・policy-as-codeのCIDR配列へ変換します。
脅威インテリとSOARの補強
チケット上のインジケータ範囲を、良性の隣へはみ出さない厳密CIDR集合へ正規化し照合条件に使います。
よくある質問
サブネット計算機との違いは?
サブネット計算機は通常1つのCIDRからマスク・ホスト・境界を出します。本ツールは任意の開始〜終了から最小の複数CIDR被覆を作ります。
1つの範囲が複数のCIDRブロックに分かれるのはなぜですか?
各ブロックは2のべき乗個のアドレスを持ち、その大きさにそろった位置から始まる必要があるためです。192.168.1.13から192.168.1.20までの8個は1つに収まらず、4つのブロックに分かれます。
大きなブロック1つでまとめないのはなぜですか?
隣のアドレスまで含んでしまうためです。.16から始まる/29は.23まで届き、範囲の終わりを越えます。許可リストでは開けるつもりのないアドレスまで許してしまうので、ぴったりのブロックだけを出します。
開始と終了を逆に入れるとどうなりますか?
黙って入れ替えず、範囲を受け付けません。開始は終了以下である必要があります。こっそり入れ替えると、コピーと貼り付けの間違いが見えなくなるからです。
IPv4の範囲は最大でいくつのブロックになりますか?
多くても32個です。0.0.0.0から255.255.255.255までの全体は、0.0.0.0/0という1つのブロックにまとまります。そのため結果は常に短く収まります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/ip-range-to-cidr \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"start_ip":"192.168.1.13","end_ip":"192.168.1.20"}'const res = await fetch("https://api.kit.forhosting.com/dev/ip-range-to-cidr", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"start_ip": "192.168.1.13",
"end_ip": "192.168.1.20"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/ip-range-to-cidr",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"start_ip": "192.168.1.13",
"end_ip": "192.168.1.20"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/ip-range-to-cidr", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"start_ip":"192.168.1.13","end_ip":"192.168.1.20"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"start_ip":"192.168.1.13","end_ip":"192.168.1.20"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/ip-range-to-cidr", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"start_ip": "192.168.1.13",
"end_ip": "192.168.1.20"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.ip_range_to_cidr",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
最小かつ厳密なCIDR被覆の意味
包含的なIPv4範囲とは、start_ipからend_ipまでの各アドレスを32ビット整数として数えたものです。
入力契約、応答形状、検証
文字列周囲の空白は除去されます。静かな入れ替えは自動化のコピーミスを隠すからです。貪欲ループは任意のIPv4範囲で最大32ブロックなので、0.0.0.0から255.255.255.255でも応答は小さく、これは単一の0.0.0.0/0に畳み込まれます。返したcidrsをAWSセキュリティグループCIDR、iptables、nftables、Cisco ACL object-group、エッジCDNのIP許可リストなど、お使いのファイアウォール方言にそのまま組み合わせられます。必須文字列start_ipとend_ipの2つを持つJSONボディをPOSTします。それぞれ厳密なドット区切りIPv4で、10進オクテット4つが0から255、先頭ゼロなしです(192.168.1.1は有効、192.168.01.1は拒否)。start_ipはend_ip以下である必要があり、逆転した範囲は端点を黙って入れ替えずinvalid_inputで失敗します。成功時は正規化済みstart_ipとend_ip、符号なし整数のstart_intとend_int、包含的address_count、cidr_count、10.0.0.0/8のようなcidrs配列、cidr・prefix・network・first_ip・last_ip・sizeを持つblocks配列を返します。欠落フィールド、非文字列、不正オクテット、範囲外オクテット、startがendより大きい場合はすべてinvalid_inputで課金されません。
IP範囲→CIDR APIが役立つ場面
ネットワークとプラットフォームのチームはベンダー提供の開始〜終了をチケットに貼り、変更申請前にCIDR形式が必要です。クラウドのランディングゾーンモジュールはCIDR一覧のみ受け付け、DHCPプールやパートナー相互接続の表列をTerraform localsへ変換するのはよくあるCI作業です。検索意図が範囲からプレフィックスへの変換なら本機能を、既に単一CIDRがありマスクやワイルドカードやホスト数だけ必要なときは一般的なサブネット計算機を使ってください。脅威インテリジェンス範囲を照合条件に展開するSIEM・SOARプレイブックは、外向きネットワークを持たない純粋parseエンドポイントの恩恵を受けます。
技術的な質問
IPv4範囲をCIDRブロックへ変換するには?
start ≤ endのドット区切り文字列としてstart_ipとend_ipを送ってください。APIはcidrsに最小の厳密一覧と、ブロックごとのnetwork・first_ip・last_ip・prefix・sizeを返します。
範囲は厳密に覆われますか?
はい。貪欲法はend_ipを超えず、包含範囲内のアドレスを飛ばさないため、ブロックの和集合は元の範囲と一致します。
start_ipがend_ipより大きいとどうなりますか?
タスクはinvalid_inputで失敗します。端点は自動入替しないので自動化の不具合が見えます。順序を直して再試行してください。
IP範囲→CIDR変換の料金は?
ブラウザツールは無料です。APIは前払いKIT残高で成功呼び出しごとに$0.002、無効入力は課金されません。