Рассмотрим два командлета PowerShell Get-NetTCPConnection и Get-NetUDPEndpoint как инструменты сетевой диагностики.
Get-NetTCPConnection - это командлет PowerShell, запуск которого без опций возвращает результат аналогичный netstat. Чтобы вывести список открытых портов, используйте опцию -State со значением Listen:
Get-NetTcpConnection -State Listen
Список открытых портов содержится в колонке LocalPort, запись «0.0.0.0» означает IPv4 адреса, а обозначение «::» относится к IPv6 адресам.
В следующей команде выводятся только действительно интересные свойства, также сделана сортировка по номеру открытых портов:
Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object -Property LocalPort | Format-Table
Как в PowerShell узнать, какая программа прослушивает порт? В следующем примере будет получено имя процесса, связанного с каждым открытым портом:
Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}} | Sort-Object -Property LocalPort | Format-Table
Чтобы узнать, какая именно программа прослушивает определённый порт, используйте следующий код на примере для 135-го порта:
$port='135'
Get-NetTcpConnection -State Listen | Where-Object {$_.LocalPort -eq "$port"} | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}} | Sort-Object -Property LocalPort | Format-Table
В отличие от команды netstat в Windows, Powershell разделяет протоколы TCP и UDP на две разные команды: Get-NetTCPConnection и Get-NetUDPEndpoint. Рассмотрим далее работу командлета Get-NetUDPEndpoint. Командлет Get-NetUDPEndpoint получает текущую статистику для конечной точки UDP. Командлет возвращает свойства конечной точки UDP, например локальные и удалённые порты UDP. Если вы не укажете никаких параметров, командлет получит статистику для всех конечных точек UDP.
Get-NetUDPEndpoint сам по себе вернёт локальный адрес и локальный порт.
А эта команда покажет открытые на всех сетевых интерфейсах UDP порты:
Get-NetUDPEndpoint | Where-Object {($_.LocalAddress -eq "0.0.0.0") -or ($_.LocalAddress -eq "::")}
Чтобы просмотреть идентификатор процесса-владельца, добавьте поле OwningProcess.
Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object -Property LocalPort | Format-Table
Используйте следующую команду, чтобы отобразить имя процесса, открывшего UDP порт:
Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}} | Sort-Object -Property LocalPort | Format-Table
No comments:
Post a Comment
А что вы думаете по этому поводу?