Categories: PowerShellWindows 10

Мониторинг открытых TCP/IP подключений с помощью PowerShell

Многие администраторы для отображения информации о сетевых подключениях TCP/IP, открытых TCP портах в Windows привыкли использовать консольную утилиту netstat или графическую TCPView . В PowerShell для замены утилиты netstat можно использовать командлет Get-NetTCPConnection , который можно довольно гибко использовать для получения информации об активных сетевых соединениях в Windows, открытых сетевых портах и запушенных процессах, которые используют TCP протокол. Благодаря тому, что PowerShell это объектно-ориентированный язык, вы можете довольно удобно делать сложные скрипты для получения информации и мониторинга открытых портов, процессах и установленных сетевым соединениях.

Попробуйте запустить командлет Get-NetTCPConnection без параметров.

Команда по аналогии с netstat вывела список всех активных подключений с указанием локального и удаленного адреса, порта, состояния подключения (Listen, Established Internet, TimeWait, Bound, CloseWait, SynReceived, SynSent, TimeWait) и идентификатор процесса (PID), которые использует это TCP подключение.

Можно вывести список локальных портов, которые слушаются (открыты) на вашем компьютере:

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State | Sort-Object LocalPort |ft

Для получения информации об использовании протокола UDP, открытых портов используется командлет Get-NetUDPEndpoint .

Можно вывести только внешние (Интернет) подключения:

Get-NetTCPConnection -AppliedSetting Internet

Для всех сетевых TCP подключений можно вывести DNS имена удаленных хостов и имена процессов .

Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}},OffloadState,CreationTime |ft

Данный PowerShell скрипт выполнил разрешение всех IP адресов хостов в DNS имена, и для каждого соединения указал имя процесса, который его использует.

По имени PID родительского процесса можно вывести список связанных имен служб Windows, которые используют сеть:

Get-WmiObject Win32_Service | Where-Object -Property ProcessId -In (Get-NetTCPConnection).OwningProcess | Where-Object -Property State -eq Running | Format-Table ProcessId, Name, Caption, StartMode, State, Status, PathName

Можно вывести только сетевые подключения, которые инициированы определенным процессом. Для этого можно использовать такой PowerShell скрипт:

$TrackProcessName = “*firefox*”
$EstablishedConnections = Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}}, OffloadState,CreationTime
Foreach ($Connection in $EstablishedConnections)
{
If ($Connection.ProcessName -like $TrackProcessName)
{
$Connection|ft
}
}

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

В следующем примере PowerShell скрипт проверяет, когда появится соединение с указанного IP адреса по порту RDP порту 3389 . Если такое подключение появится в списке, он выведет всплывающее уведомление и логирует дату и время подключения в текстовый файл:

$TrackingIP = “192.168.10.50”
$TrackingPort =”3389”
$log = "C:psrdp_connection_log.txt"
$EstablishedConnections = Get-NetTCPConnection -State Established
Foreach ($Connection in $EstablishedConnections)
{
If (($Connection.RemoteAddress -eq $TrackingIP) -and ($Connection.LocalPort -eq $TrackingPort))
{
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = "К вашему компьютеру подключились по RDP c $($Connection.RemoteAddress)"
$balmsg.BalloonTipTitle = "Новое RDP подключение с $($Connection.RemoteAddress)"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
(Get-Date).ToString() + ' ' + $Connection.RemoteAddress + ' установлено RDP подключение ' >> $log
}
}

Аналогичным образом можно отслеживать и логировать сетевые подключения по любому другому протоколу, например SSH , SMB , FTP , SMTP и т.д. Такой PowerShell скрипт можно оформить в виде службы Windows, которая будет запускаться автоматически.

Данный скрипт можно использовать совместно с рассмотренным ранее скриптом защиты RDP от подбора паролей с блокировкой IP правилами Windows Firewall .

С помощью PowerShell remoting командлетов ( Enter-PSSession и Invoke-Command ) вы можете получить список открытых TCP портов и подключений на удаленных компьютерах.

Invoke-Command -ComputerName host1 {Get-NetTCPConnection -State Established}

Командлет Get-NetTCPConnection (также как и Test-NetConnection ) может быть крайне полезен для мониторинга и диагностики сетевых подключений в Windows.

admin

Share
Published by
admin

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

6 дней ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago