Извлечение IP-адресов в Powershell без получения дубликатов - PullRequest
0 голосов
/ 11 февраля 2020

Как я могу взять строку IP-адресов, извлеченных из файла, и записать их в STDOUT в powershell, не получая дубликат IP? Мне нужно сделать это, чтобы я мог сосчитать IP-адреса и порты из файла журнала.


function Get-Log{
    $totalIP = 0
    $totalPRT = 0
    $logs = gc .\sample.log | sls "INext-Drop-DEFLT"
    $probes = $logs | foreach-object{$_.Line -match "SRC=([^ ]*).*\s*DPT=(\d*)">$null;$Matches[1], $Matches[2] -join ":"
    }
    $probes | foreach-object{$_ -match "(\d*\.\d*\.\d*\.\d*):(\d*)">$null;
        if ($matches[1]){
    $totalIP += 1
    }
    if ($matches[2]){
    $totalPRT += 1
    }
    Write-Host "This IP: "$matches[1] "scanned port number: "$matches[2]
    }
    Write-Host "$totalIP $totalPRT"   
}

образец файла sample.log:

Jan 29 00:00:28 myth kernel: SFW2-INext-DROP-DEFLT IN=ppp0 OUT= MAC= SRC=24.64.208.134 DST=216.58.112.55 LEN=512 TOS=0x00 PREC=0x00 TTL=70 ID=55012 PROTO=UDP SPT=24128 DPT=1026 LEN=492 
Jan 29 00:00:28 myth kernel: SFW2-INext-DROP-DEFLT IN=ppp0 OUT= MAC= SRC=24.64.208.134 DST=216.58.112.55 LEN=512 TOS=0x00 PREC=0x00 TTL=70 ID=55013 PROTO=UDP SPT=24128 DPT=1027 LEN=492 
Jan 29 00:00:28 myth kernel: SFW2-INext-DROP-DEFLT IN=ppp0 OUT= MAC= SRC=24.64.208.134 DST=216.58.112.55 LEN=512 TOS=0x00 PREC=0x00 TTL=70 ID=55014 PROTO=UDP SPT=24128 DPT=1028 LEN=492 
Jan 29 00:01:54 myth kernel: SFW2-INext-DROP-DEFLT IN=ppp0 OUT= MAC= SRC=207.68.178.56 DST=216.58.112.55 LEN=40 TOS=0x00 PREC=0x00 TTL=241 ID=24105 PROTO=TCP SPT=80 DPT=2540 WINDOW=9300 RES=0x00 RST URGP=0 
Jan 29 00:02:24 myth kernel: SFW2-INext-ACC-TCP IN=ppp0 OUT= MAC= SRC=123.112.87.126 DST=216.58.112.55 LEN=44 TOS=0x00 PREC=0x00 TTL=107 ID=18618 PROTO=TCP SPT=53185 DPT=25 WINDOW=24000 RES=0x00 SYN URGP=0 OPT (02040218) 
Jan 29 00:02:42 myth kernel: SFW2-FWDint-ACC-FORW IN=eth0 OUT=ppp0 SRC=192.168.17.24 DST=192.168.9.51 LEN=235 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=138 DPT=138 LEN=215 
Jan 29 00:02:42 myth kernel: SFW2-FWDint-ACC-FORW IN=eth0 OUT=ppp0 SRC=192.168.17.24 DST=192.168.10.60 LEN=235 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=138 DPT=138 LEN=215 
Jan 29 00:02:42 myth kernel: SFW2-FWDint-ACC-FORW IN=eth0 OUT=ppp0 SRC=192.168.17.24 DST=192.168.9.51 LEN=204 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=138 DPT=138 LEN=184 

1 Ответ

0 голосов
/ 11 февраля 2020

Работая с текущими логиками c, вы можете сделать что-то вроде следующего:

$IPsAndPorts = Get-Content sample.log |
  Select-String -Pattern 'DROP-DEFLT.*?SRC=([\d\.]+).*?DPT=(\d+)' | ForeachObject {
    [pscustomobject]@{
      IP = $_.matches.groups[1].value
      Port = $_.matches.groups[2].value
    }
  }
$IPsAndPorts
"Unique IP Count: {0} and Unique Port Count: {1}" -f ($IPsAndPorts.IP | Select -Unique).count,($IPsAndPorts.Port | Select -Unique).count

$IPsAndPorts будет содержать массив объектов со свойствами IP и Port. Из этого массива вы можете выполнять подсчеты и / или фильтрацию на предмет уникальности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...