我需要能夠比較 2 行 IP 子網并判斷是否存在重疊。
例如:
在第 1 行,我有一個 /24,我需要檢查這個 /24 是否存在于第 2 行(例如通過 /24 或通過超網 /21)
所以:
ROW 1: 192.168.2.0/24
ROW 2: 192.168.0.0/21
結果 -> 第 1 行存在于第 2 行中
我不確定如何在 Excel 中執行此操作
有人知道嗎?
uj5u.com熱心網友回復:
如果您想在 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
uj5u.com熱心網友回復:
為此,我將創建一個函式來查找UInt32相關子網中 IP 地址的基地址(作為型別):
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(另請參閱:在 Powershell 中,將兩個表合并為一個的最佳方法是什么?):
Import-CSV .\My.csv |Join -On { Get-IPBase $_.Row1 } -Eq { Get-IPBase $_.Row2 }
如果您喜歡更深入的解釋或在實施此問題時遇到問題,請在您的問題中添加更多詳細資訊(如您自己嘗試的內容和示例串列。另請參閱:如何提問)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/408260.html
標籤:
