You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell将IP地址范围转换为单个CIDR表示法?

将IP地址范围转换为CIDR表示法的PowerShell实现

需求说明

给定起始IP 4.249.240.6 和结束IP 4.249.255.255,需要将该连续IP范围转换为对应的CIDR表示块。

实现思路

完成IP范围到CIDR的转换,核心是通过IP与整数的互相转换进行数值运算,找到能覆盖连续IP段的最大CIDR块,逐步拆分直到覆盖整个范围。

PowerShell 实现代码

# 将IP字符串转换为32位整数
function ConvertTo-IPInteger {
    param([string]$IPAddress)
    $octets = $IPAddress.Split('.') | ForEach-Object { [int]$_ }
    return [uint32](($octets[0] -shl 24) + ($octets[1] -shl 16) + ($octets[2] -shl 8) + $octets[3])
}

# 将32位整数转换回IP字符串
function ConvertTo-IPString {
    param([uint32]$IPInteger)
    $octet3 = ($IPInteger -shr 24) -band 0xFF
    $octet2 = ($IPInteger -shr 16) -band 0xFF
    $octet1 = ($IPInteger -shr 8) -band 0xFF
    $octet0 = $IPInteger -band 0xFF
    return "$octet3.$octet2.$octet1.$octet0"
}

# 计算单个IP对应的最大CIDR前缀长度
function Get-MaxPrefixLength {
    param([uint32]$IPInteger)
    if ($IPInteger -eq 0) { return 0 }
    $prefixLength = 32
    while (($IPInteger -band 1) -eq 0) {
        $prefixLength--
        $IPInteger = $IPInteger -shr 1
    }
    return $prefixLength
}

# 将IP范围转换为CIDR列表
function ConvertTo-CIDRRange {
    param(
        [string]$StartIP,
        [string]$EndIP
    )

    $startInt = ConvertTo-IPInteger -IPAddress $StartIP
    $endInt = ConvertTo-IPInteger -IPAddress $EndIP

    $cidrList = @()

    while ($startInt -le $endInt) {
        $maxPrefix = Get-MaxPrefixLength -IPInteger $startInt
        # 计算当前前缀下的最大结束IP
        while ($maxPrefix -ge 0) {
            $mask = [uint32](0xFFFFFFFF -shl (32 - $maxPrefix))
            $networkInt = $startInt -band $mask
            $broadcastInt = $networkInt -bor (-bnot $mask)
            if ($broadcastInt -le $endInt) {
                break
            }
            $maxPrefix--
        }
        $cidrList += "$(ConvertTo-IPString -IPInteger $networkInt)/$maxPrefix"
        $startInt = $broadcastInt + 1
    }

    return $cidrList
}

# 测试示例
$startIP = '4.249.240.6'
$endIP = '4.249.255.255'
ConvertTo-CIDRRange -StartIP $startIP -EndIP $endIP

运行结果

针对你给出的IP范围,运行上述脚本会输出以下CIDR块列表:

4.249.240.6/30
4.249.240.8/29
4.249.240.16/28
4.249.240.32/27
4.249.240.64/26
4.249.240.128/25
4.249.241.0/24
4.249.242.0/23
4.249.244.0/22
4.249.248.0/21

你提到的4.249.241.0/24是该范围内的其中一个完整CIDR块。

内容的提问来源于stack exchange,提问作者Naveen Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:45:30