You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本IP映射CIDR子网异常:多子网匹配问题求助

解决IP到CIDR子网映射的多匹配问题

核心问题分析

当IP同时属于多个CIDR子网时(如10.41.92.45同时在10.41.92.0/29和10.41.92.40/29中),原脚本没有遵循最长前缀匹配规则——掩码位数越长,子网范围越小,是IP映射的最精确匹配项。

修正后的PowerShell脚本

# 辅助函数:验证IP是否属于指定CIDR子网
function Test-IPInCIDR {
    param(
        [Parameter(Mandatory=$true)][string]$IPAddress,
        [Parameter(Mandatory=$true)][string]$CIDR
    )

    # 拆分CIDR为网络地址和前缀长度
    $cidrSplit = $CIDR -split '/'
    $networkAddr = [System.Net.IPAddress]$cidrSplit[0]
    $prefixLen = [int]$cidrSplit[1]

    # 转换IP和网络地址为字节数组
    $ipBytes = ([System.Net.IPAddress]$IPAddress).GetAddressBytes()
    $networkBytes = $networkAddr.GetAddressBytes()

    # 生成子网掩码字节数组
    $maskBytes = New-Object byte[] 4
    $remainingBits = $prefixLen
    for ($i = 0; $i -lt 4; $i++) {
        $bitsToSet = [math]::Min(8, $remainingBits)
        if ($bitsToSet -gt 0) {
            $maskBytes[$i] = [byte](0xFF -shl (8 - $bitsToSet))
            $remainingBits -= $bitsToSet
        }
    }

    # 计算IP对应的网络地址
    $ipNetworkBytes = New-Object byte[] 4
    for ($i = 0; $i -lt 4; $i++) {
        $ipNetworkBytes[$i] = $ipBytes[$i] -band $maskBytes[$i]
    }
    $ipNetworkAddr = [System.Net.IPAddress]$ipNetworkBytes

    # 对比网络地址是否一致
    return $ipNetworkAddr.Equals($networkAddr)
}

# 替换为你的实际IP列表和CIDR子网列表
$targetIPs = Get-Content "你的IP列表文件路径.txt"
$cidrSubnets = Get-Content "你的CIDR子网文件路径.txt"

# 批量处理IP映射
foreach ($ip in $targetIPs) {
    # 筛选所有包含当前IP的CIDR子网
    $matchedCidrs = $cidrSubnets | Where-Object { Test-IPInCIDR -IPAddress $ip -CIDR $_ }

    if ($matchedCidrs.Count -gt 0) {
        # 按前缀长度降序排序,取第一个(最精确匹配)
        $bestMatch = $matchedCidrs | Sort-Object { [int]($_ -split '/')[1] } -Descending | Select-Object -First 1
        # 输出结果,可替换为写入文件等操作
        Write-Output "$ip -> $bestMatch"
    }
    else {
        Write-Output "$ip 未匹配到任何子网"
    }
}

关键修改说明

  1. 精确子网验证:Test-IPInCIDR通过字节级的网络地址计算判断IP归属,避免字符串匹配的误判。
  2. 最长前缀筛选:对每个IP的所有匹配子网,按掩码位数从大到小排序,取首位结果,确保拿到最精确的子网映射。
  3. 批量处理适配:支持从文件读取IP和CIDR列表,适配你3000+IP的批量处理需求。

内容的提问来源于stack exchange,提问作者majan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:05:17