PowerShell检查IP是否为保留IP
function Test-ReservedIP {param([Parameter(Mandatory=$true)][string]$IPAddress)# 正则匹配 IPv4 格式$ipv4Pattern = '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$'if ($IPAddress -notMatch $ipv4Pattern) {Write-Error "无效的IPv4地址: $IPAddress"return $false}# 提取并转换为整数数组$octets = $IPAddress.Split('.') | ForEach-Object { [int]$_ }# 验证每个八位组范围foreach ($o in $octets) {if ($o -lt 0 -or $o -gt 255) {Write-Error "IP段超出范围 (0-255): $o"return $false}}# 将IPv4转换为32位无符号整数(大端序)$ipInt = ($octets[0] -shl 24) + ($octets[1] -shl 16) + ($octets[2] -shl 8) + $octets[3]# 定义保留IP范围(起始和结束整数)$reservedRanges = @(# 127.0.0.0/8 - Loopback@{ Start = 127 -shl 24; End = (127 -shl 24) + 0x00FFFFFF },# 10.0.0.0/8 - Private@{ Start = 10 -shl 24; End = (10 -shl 24) + 0x00FFFFFF },# 172.16.0.0/12 - Private (172.16.0.0 ~ 172.31.255.255)@{ Start = (172 -shl 24) + (16 -shl 16); End = (172 -shl 24) + (31 -shl 16) + 0xFFFF },# 192.168.0.0/16 - Private@{ Start = (192 -shl 24) + (168 -shl 16); End = (192 -shl 24) + (168 -shl 16) + 0xFFFF },# 169.254.0.0/16 - Link-local@{ Start = (169 -shl 24) + (254 -shl 16); End = (169 -shl 24) + (254 -shl 16) + 0xFFFF },# 224.0.0.0/4 - Multicast (224.0.0.0 ~ 239.255.255.255)@{ Start = 224 -shl 24; End = (239 -shl 24) + 0x00FFFFFF },# 192.0.2.0/24 - TEST-NET-1 (examples and tutorials)@{ Start = (192 -shl 24) + (0 -shl 16) + (2 -shl 8); End = (192 -shl 24) + (0 -shl 16) + (2 -shl 8) + 0xFF },# 198.51.100.0/24 - TEST-NET-2@{ Start = (198 -shl 24) + (51 -shl 16) + (100 -shl 8); End = (198 -shl 24) + (51 -shl 16) + (100 -shl 8) + 0xFF },# 203.0.113.0/24 - TEST-NET-3@{ Start = (203 -shl 24) + (0 -shl 16) + (113 -shl 8); End = (203 -shl 24) + (0 -shl 16) + (113 -shl 8) + 0xFF },# 0.0.0.0/8 - This network@{ Start = 0; End = 0x00FFFFFF })# 判断是否在任一保留范围内foreach ($range in $reservedRanges) {if ($ipInt -ge $range.Start -and $ipInt -le $range.End) {return $true}}return $false }$ip = "127.0.1.1"$isReserved = Test-ReservedIP -IPAddress $ip if ($isReserved) {"是保留IP"} else {"不是保留IP"}