PowerShell中如何从API返回的IP数据生成完整IP数组?
实现方法(PowerShell)
要把IP段展开为单个IP的数组,核心思路是将IP地址转换为可计算的整数,通过遍历整数范围生成所有IP,再转换回字符串格式。
1. 定义IP与整数互转的辅助函数
# 将IPv4地址转换为32位整数 function ConvertTo-IPInt { param([string]$IPAddress) $octets = $IPAddress.Split('.') return [uint32]([uint32]$octets[0] -shl 24) + ([uint32]$octets[1] -shl 16) + ([uint32]$octets[2] -shl 8) + [uint32]$octets[3] } # 将32位整数转换回IPv4地址 function ConvertTo-IPString { param([uint32]$IPInt) return "$(($IPInt -shr 24) -band 255).$((($IPInt -shr 16) -band 255)).$((($IPInt -shr 8) -band 255)).$($IPInt -band 255)" }
2. 遍历$IPs数据集生成全量IP数组
$NewIPs = @() foreach ($item in $IPs) { # 处理单个IP(End字段为空) if ([string]::IsNullOrEmpty($item.End)) { $NewIPs += $item.Start } # 处理IP段(Start和End都有值) else { $startInt = ConvertTo-IPInt -IPAddress $item.Start $endInt = ConvertTo-IPInt -IPAddress $item.End # 遍历整数范围,转换为IP字符串并加入数组 for ($i = $startInt; $i -le $endInt; $i++) { $NewIPs += ConvertTo-IPString -IPInt $i } } } # 可直接输出查看结果 $NewIPs
说明
- 辅助函数通过位运算实现IP和整数的快速转换,哪怕是跨段(比如
100.20.3.8到100.20.4.255这种第三位变化的IP段)也能正确遍历。 - 遍历过程会自动识别单个IP和IP段,无需手动拆分标识。
内容的提问来源于stack exchange,提问作者greenGob19
相关产品推荐
相关产品推荐

