Войти

Показать полную графическую версию : Проверить какой DHCP области (ScopeId) принадлежит IP адрес?


Buddha.g
12-10-2016, 03:18
Я сначала использовал функцию с таким алгоритмом:

$IPAddress="10.9.9.200"
$IPAddressArray=$IPAddress -split '\W'
$i=$IPAddressArray.Length
While ($i -gt 0)
{
$i--
$IPAddressArray[$i]=0
$Subnet=$IPAddressArray -join "."
if (Get-DhcpServerv4Scope -ScopeId $Subnet -ErrorAction SilentlyContinue) { break }
}
if ($i -gt 0) { Write-Host " Scope $Subnet exist" }
else { Write-Host " Scope not exist " }

Но работает некорректно. Причислил IP "10.9.9.200" к области 10.0.0.0/24,
в которой он и близко не лежит.

Kazun
12-10-2016, 09:04
function IsIpAddressInRange {
param(
[string] $ipAddress,
[string] $fromAddress,
[string] $toAddress
)

$ip = [system.net.ipaddress]::Parse($ipAddress).GetAddressBytes()
[array]::Reverse($ip)
$ip = [system.BitConverter]::ToUInt32($ip, 0)

$from = [system.net.ipaddress]::Parse($fromAddress).GetAddressBytes()
[array]::Reverse($from)
$from = [system.BitConverter]::ToUInt32($from, 0)

$to = [system.net.ipaddress]::Parse($toAddress).GetAddressBytes()
[array]::Reverse($to)
$to = [system.BitConverter]::ToUInt32($to, 0)

$from -le $ip -and $ip -le $to
}

$IPAddress="10.9.9.200"
Get-DhcpServerv4Scope | Where {IsIpAddressInRange $IPAddress $_.StartRange $_.EndRange}

Если нет областей больше /24,то можно:
Get-DhcpServerv4Scope -ScopeId ("10.9.9.200" -replace "\d+$","0")

Buddha.g
12-10-2016, 12:28
Очень просто, как и должно быть у профи.
Лично я разбираясь с этим кодом потратил несколько часов
и перелистал пару книжек.
Спасибо!




© OSzone.net 2001-2012