IPv4 地址段展開器

將 IPv4 地址段或 CIDR 展開為完整地址列表,並即時計數。適用於防火牆規則與資產清單。

把範圍變成清單。 給出起止範圍(192.168.1.1-192.168.1.20)或 CIDR(10.0.0.0/28),即可得到其中每個地址及計數。超大範圍會為避免瀏覽器卡頓而截斷。本地計算。

超過 10,000 個地址時僅顯示前 10,000 個並附計數。

把地址段展開成列表

描述同一段地址的兩種方式

CIDR 塊和起止地址對都能描述一段連續地址,但表達能力並不相同。CIDR 只能表示大小為 2 的冪、且基地址按該大小對齊的塊——10.0.0.0/30 合法,而 10.0.0.1/3010.0.0.0/30 表示的是同一個塊,因為低位會被掩碼抹掉。像 192.168.0.254-192.168.1.2 這樣的任意區間根本無法寫成單個 CIDR,需要三個才能覆蓋。

本工具兩種形式都接受,並把它們展開成顯式列表。這在列表的消費方不認識 CIDR 時特別有用:老式裝置的白名單、表格列、shell 迴圈,以及快速確認某個區間是否真的覆蓋了你以為的範圍。

邊界情況為什麼關鍵

自己手寫展開器最常見的 bug,是把地址當成四個獨立的數字、只對最後一段做自增。這在區間不跨段時能用,一旦跨段,192.168.0.255 的下一個就會變成 192.168.0.256 而不是 192.168.1.0。轉成 32 位整數、自增、再轉回來,進位自然就正確了,這是唯一值得采用的做法。

另一個陷阱是符號位。在按位運算結果為有符號 32 位整數的語言裡,255.255.255.255 如果不強制轉回無符號就會變成 -1。所有高於 127.x.x.x 的地址都會中招,而如果你只用 10 或 192 開頭的 RFC 1918 地址測試,這個 bug 會一直藏著。

為什麼輸出有上限

一個 /8 包含 1670 萬個地址,展開成文本大約 250 MB,瀏覽器標籤頁在渲染完成之前就會卡死。這裡的輸出設有上限,同時單獨給出真實總數,讓你既能看到區間的實際規模,又不必讓瀏覽器去渲染它。如果確實需要遍歷超大地址塊,應該在服務端以流式方式處理,而不是塞進一個文本框。

開源說明:使用原生 JavaScript 實現,不依賴第三方庫。

常見問題

支援哪些輸入格式?
既支援 10.0.0.0/29 這樣的 CIDR 寫法,也支援用連字元或空格分隔的起止地址,例如 10.0.0.1 - 10.0.0.9。
為什麼輸出有數量上限?
完整列出一個 /8 會產生一千六百多萬行,直接把標籤頁卡死。上限保證頁面保持響應,同時計數欄仍會顯示該區間的真實規模。
列表包含網路地址和廣播地址嗎?
包含。展開器會逐個列舉區間內的每一個地址,因此得到的是完整地址塊,而不僅僅是可分配的主機地址。
為什麼我的區間被拒絕了?
最常見的原因是結束地址在數值上小於起始地址。工具會把兩者當作 32 位整數比較,因此 10.0.0.5 到 10.0.0.1 不是有效區間。
結果可以直接粘進防火牆規則嗎?
可以,這正是展開區間最常見的用途。多數工具接受以換行分隔的列表,不過在支援 CIDR 的地方,用 CIDR 寫法會更緊湊。
跨八位組進位能正確處理嗎?
能。運算是在 32 位整數上進行的,因此從 10.0.0.255 跨到 10.0.1.0 的區間會正確地繼續下去。