For Example:
EXPANDCIDR "10.0.0.1/24"
10.0.0.255
function ql { $Args } function ExpandCIDR($CIDR) { $bits = ql 0 128 192 224 240 248 252 254 $net = $cidr.Split("/") $sn = $net[0] $octets = $sn.Split(".") [int]$mask = $net[1] $activ = $mask % 8 $actval = $bits[$activ] $fulloctets = [System.Math]::Truncate($mask / 8) $ao = [int]$octets[$fulloctets] $mn = 256 – $actval $x = [System.Math]::Truncate($ao / $mn) $num = $x * $mn ## calculate active part of broadcast address $bd = $num + $mn -1 switch ($fulloctets) { 1 { $fixed = $octets[0] $subnet = $fixed + "." + $num.ToString() + ".0.0" $strmask = "255." + $actval.ToString() + ".0.0" $broadcast = $fixed + "." + $bd.ToString() + ".255.255" break } 2 { $fixed = $octets[0]+"."+$octets[1] $subnet = $fixed + "." + $num.ToString() + ".0" $strmask = "255.255." + $actval.ToString() + ".0" $broadcast = $fixed + "." + $bd.ToString() + ".255" break } 3 { $fixed = $octets[0]+"."+$octets[1]+"."+$octets[2] $subnet = $fixed + "." + $num.ToString() $strmask = "255.255.255." + $actval.ToString() $broadcast = $fixed + "." + $bd.ToString() break } } $snoct = $subnet.Split(".") $snoct[3] = ([int]$snoct[3] + 1).ToString() $fip = $snoct[0]+"."+$snoct[1]+"."+$snoct[2]+"."+$snoct[3] $bdoct = $broadcast.Split(".") $bdoct[3] = ([int]$bdoct[3] – 1).ToString() $lip = $bdoct[0]+"."+$bdoct[1]+"."+$bdoct[2]+"."+$bdoct[3] return $broadcast }
How I use this is to combine it with this function:
function get-nextaddress { param ([string]$address ) $a = [System.Net.IpAddress]::Parse($address) ## turn the string to IP address $z = $a.GetAddressBytes() ## and then to an array of bytes if ($z[3] -eq 255) ## last octet full { $z[3] = 0 ## so reset if ($z[2] -eq 255) ## third octet full { $z[2] = 0 ## so reset $z[1] += 1 ## increment second octet } else { $z[2] += 1 ## increment third octect } } else { $z[3] += 1 ## increment last octet } $c = [System.Net.IpAddress]($z) ## recreate IP address return $c.ToString() }
Then loop through all of the IPs in the group.
$broken=@() $lastIP = expandCidr($ip) $curradd = $ip.Split("/")[0] do { $addr = get-nextaddress($curradd) Write-Host $addr $ipobj = Add-OneIP $addr if ($broken -notcontains $ipobj) {$broken += $ipobj} $curradd = $addr } until ($addr -eq $lastIP)
When done, the variable $Broken contains all of the IPs in the CIDR range.
$IP = "10.0.0.1/24"
<call script above>
10.0.0.1
10.0.0.2
10.0.0.3
...
10.0.0.255
No comments:
Post a Comment