ConvertFrom-CidrToIPvNetwork -vlsm "10.202.84.0/25"
ConvertFrom-CidrToIPvNetwork -vlsm "2001:489a:a0d::/64"
Test-IpAddressinNetwork -ipaddress -vlsm 10.202.84.0/25
function ConvertFrom-CidrToIPvNetwork | |
{ | |
[CmdletBinding()] | |
param( | |
[Parameter(Mandatory, ValueFromPipeline)] | |
[string] $vlsm | |
) | |
$convertToIpAddress = { | |
param( | |
[int] $byteRange, | |
[System.Numerics.BigInteger]$bigInt | |
) | |
$bytes = $bigInt.ToByteArray() | |
$null = [System.Array]::Reverse($bytes, 0, $byteRange) | |
$null = [System.Array]::Resize([ref] $bytes, $byteRange) | |
[System.Net.IpAddress]::new($bytes) | |
} | |
$ipAddress, $prefix = $vlsm -split '/' | |
$ipAddressIP = [System.Net.IPAddress]::Parse($ipAddress) | |
if ($ipAddressIP.AddressFamily -eq 'InterNetwork') { | |
# use V4 | |
$byteRange = 4 | |
} else { | |
# Use V6 | |
$byteRange = 16 | |
} | |
$ipAddress = [System.Numerics.BigInteger]::new( $ipAddressIP.GetAddressBytes()[($byteRange-1)..0]) | |
#$ipAddress = [bigint]::new( ([byte[]]$ipAddressIP.GetAddressBytes()[($byteRange-1)..0]), $true, $true ) | |
$broadcastAddress = ( [System.Numerics.BigInteger]1 -shl ($byteRange* 8) ) - 1 | |
$subnetMask = $broadcastAddress -shl (($byteRange*8) - $prefix) | |
$networkAddress = $ipAddress -band $subnetMask | |
$networkBroadcast = $networkAddress -bor (-bnot $subnetMask) | |
$startIPAddress = $networkAddress + 1 | |
$endIPAddress = $networkBroadcast - 1 | |
$total = [System.Numerics.BigInteger]::Pow(2, (($byteRange*8)- $prefix)) - 2 | |
[PSCustomObject][Ordered]@{ | |
IpAddress = $ipAddressIP | |
AddressFamily = $ipAddressIP.AddressFamily | |
Prefix = $prefix | |
Network = & $convertToIpAddress $byteRange $networkAddress | |
SubnetMask = & $convertToIpAddress $byteRange $subnetMask | |
BroadcastAddress = & $convertToIpAddress $byteRange $broadcastAddress | |
Range = [PSCustomObject][Ordered]@{ | |
Start = & $convertToIpAddress $byteRange $startIPAddress | |
End = & $convertToIpAddress $byteRange $endIPAddress | |
Total = $total | |
} | |
} | |
} | |
function Test-IpAddressinNetwork { | |
[CmdletBinding()] | |
param( | |
[Parameter(Mandatory, ValueFromPipeline)] | |
[string] $ipAddress, | |
[Parameter(Mandatory, ValueFromPipeline)] | |
[string] $vlsm | |
) | |
$ipAddressIP = [System.Net.IPAddress]::Parse($ipAddress) | |
$vlsmNetwork = ConvertFrom-CidrToIPvNetwork -vlsm $vlsm | |
if ($ipAddressIP.AddressFamily -eq 'InterNetwork') { | |
# use V4 | |
$byteRange = 4 | |
} else { | |
# Use V6 | |
$byteRange = 16 | |
} | |
$ipAddress = [System.Numerics.BigInteger]::new( $ipAddressIP.GetAddressBytes()[($byteRange-1)..0]) | |
$networkAddress = [System.Numerics.BigInteger]::new( $vlsmNetwork.Network.GetAddressBytes()[($byteRange-1)..0]) | |
$subnetMask = [System.Numerics.BigInteger]::new( $vlsmNetwork.SubnetMask.GetAddressBytes()[($byteRange-1)..0]) | |
return ($ipAddress -band $subnetMask) -eq ($networkAddress -band $subnetMask) | |
} |