excel 比较两行IP子网

bcs8qyzn  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(134)

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

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

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

bbuxkriu

bbuxkriu1#

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

  1. Clear-Host
  2. #Import csv file with IPs (Delimiter ";")
  3. $rowlist = Import-Csv -Path "C:\rows_directory\rowlist.csv" -Delimiter ";"
  4. $row1 = $rowlist | Select-Object -ExpandProperty "row1"
  5. $row2 = $rowlist | Select-Object -ExpandProperty "row2"
  6. foreach($string in $row1) {
  7. if($string -in $row2) {
  8. Write-Output "ROW1: $string exist in ROW2"
  9. }
  10. }

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


的数据
结果是:

  1. ROW1: 123 exist in ROW2

展开查看全部
tp5buhyn

tp5buhyn2#

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

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

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

  1. Get-IPBase 192.168.2.0/24
  2. 3221225472
  3. Get-IPBase 192.168.0.0/24
  4. 3221225472


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

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

展开查看全部

相关问题