четверг, 22 августа 2019 г.

Powershell. Контроль сетевой активности процесса


Приветствую, уважаемый читатель!

Недавно возникла потребность в режиме реального времени проконтролировать с какими белыми IP-адресами соединяется конкретный процесс, обновляющий антивирус. Небольшой скрипт, который решает данную задачу, приведен ниже.



Алгоритм достаточно простой:
  1. Задаём имя процесса, который хотим контролировать, и получаем его PID.
  2. Смотрим сетевую активность данного процесса каждую секунду.
  3. Как только определили соединение с уникальным IP, добавляем его в массив и выводим в консоль.


$mas=@()

    while ($count -le 1) {   
        $process_list = Get-WmiObject -Class Win32_Process | select Caption,ProcessID | where Caption -eq "Up2Date.exe"
        $remote = Get-NetTCPConnection | where LocalAddress -NE "0.0.0.0" | where OwningProcess -eq $process_list.ProcessID
   
            if((!($mas.Contains($remote.RemoteAddress))) -and ($remote)) {
                '{0} | {1} | {2} | {3} ' -f "Соединение с IP - " , $remote.RemoteAddress , $remote.RemotePort , $remote.State
                $mas += $remote.RemoteAddress       
                }

        Start-Sleep -Seconds 1
    }


Вид из консоли:



2 комментария:

  1. Небольшой комментарий)
    1. если процессов с таким именем несколько - то не работает)
    Так заработает: where OwningProcess -In $process_list.ProcessID

    ОтветитьУдалить