excel 比较两行IP子网

bcs8qyzn  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(95)

我需要能够比较IP子网的2行,并告诉如果有重叠。
举例来说:
在第1行,我有一个/24,我需要检查这个/24是否存在于第2行(例如,通过/24或通过超网/21)
所以:

ROW 1: 192.168.2.0/24
ROW 2: 192.168.0.0/21

字符串
结果->第1行存在于第2行
我不知道如何在Excel中做到这一点。
有人知道吗?

bbuxkriu

bbuxkriu1#

如果你想在powershell中执行此操作,可以使用以下脚本:

Clear-Host
#Import csv file with IPs (Delimiter ";")
$rowlist = Import-Csv -Path "C:\rows_directory\rowlist.csv" -Delimiter ";"

$row1 = $rowlist | Select-Object -ExpandProperty "row1" 
$row2 = $rowlist | Select-Object -ExpandProperty "row2"

foreach($string in $row1) {
    if($string -in $row2) {
        Write-Output "ROW1: $string exist in ROW2"
    }
}

字符串
我在文件中填写了:


的数据
结果是:

ROW1: 123 exist in ROW2

tp5buhyn

tp5buhyn2#

为此,我将创建一个函数来查找相关子网中IP地址的基址(作为UInt32类型):

Function Get-IPBase($Address) {
    $IP, $SubNet = $Address.Split('/', 2)
    $Bytes = ([IPAddress]$IP).GetAddressBytes()
    if ([BitConverter]::IsLittleEndian) { [Array]::Reverse($Bytes) }
    [BitConverter]::ToUInt32($bytes, 0) -BAnd -BNot ([UInt32][Math]::Pow(2, $SubNet) - 1)
}

字符串
函数返回的内容示例:

Get-IPBase 192.168.2.0/24
3221225472
Get-IPBase 192.168.0.0/24
3221225472


然后,使用Join-Object script/Join-Object Module进行自连接(另请参见:In Powershell, what's the best way to join two tables into one?):

Import-CSV .\My.csv |Join -On { Get-IPBase $_.Row1 } -Eq { Get-IPBase $_.Row2 }

相关问题