Вы можете использовать Get-NetTCPConnection для возврата TCP-соединений в качестве коллекции объектов PowerShell.
$netstat = Get-NetTCPConnection
$listeningPorts = $netstat | where state -eq 'Listen' | select -expand localport -unique
$netstat | where {$_.LocalPort -and $_.RemotePort -and $_.LocalAddress -ne '127.0.0.1'} |
Select LocalAddress,LocalPort,RemoteAddress,RemotePort,
@{n='Direction';e={
if ($_.LocalPort -in $listeningPorts) {
'Inbound'
}
else { 'Outbound' }
}
}
Если вы хотите выполнить это удаленно, при условии, что PSRemoting включен , вы можете использовать Invoke-Command :
$sb = {
$netstat = Get-NetTCPConnection
$listeningPorts = $netstat | where state -eq 'Listen' | select -expand localport -unique
$netstat | where {$_.LocalPort -and $_.RemotePort -and $_.LocalAddress -ne '127.0.0.1'} |
Select LocalAddress,LocalPort,RemoteAddress,RemotePort,
@{n='Direction';e={
if ($_.LocalPort -in $listeningPorts) {
'Inbound'
}
else { 'Outbound' }
}
}
}
Invoke-Command -ComputerName $Computers -Scriptblock $sb
Критерии Where
могут потребоваться изменить. Мои предположения заключались в том, чтобы не включать никакие порты с номерами 0
или любые соединения, сделанные с помощью 127.0.0.1
. Как только прослушивающие порты установлены, я предполагаю, что они используются только во входящих соединениях.