从PowerShell中的CIDR表示法问题生成IP范围

mepcadol  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(117)

我有下面的powershell函数,我想从CIDR返回IP范围。
代码如下:

function ConvertFrom-CidrNotation {
    param(
        [Parameter(Mandatory=$true)]
        [string]$cidr
    )

    $parts = $cidr -split "/"
    $ip = $parts[0]
    $prefix = $parts[1]

    $subnet = [math]::pow(2, (32 - $prefix))
    $startIP = ([System.Net.IPAddress]::Parse($ip).GetAddressBytes() | ForEach-Object{ $_ -bor 0 }) -join "."
    
    # Correct the end IP calculation
    $ipBytes = [System.Net.IPAddress]::Parse($ip).GetAddressBytes()
    $subnetBytes = [BitConverter]::GetBytes([int]$subnet)
    $endIPBytes = for ($i = 0; $i -lt 4; $i++) { $ipBytes[$i] -bor $subnetBytes[$i] }
    $endIP = $endIPBytes -join "."

    return "$startIP - $endIP"
}

字符串
你能告诉我为什么我会得到错误的结果吗?

bmp9r5qi

bmp9r5qi1#

使用以下命令获取起始地址

$ip = '192.3.6.8' -split '\.'

$startIP = 0
for($i = 3; $i -ge 0; $i--)
{
   $startIP += ([int]::Parse($ip[3-$i])) -shl (8 * $i)
}

Write-Host $startIP.ToString("x4")

字符串

相关问题