Jak sprawdzić aktywne połączenia sieciowe nawiązane z naszej maszyny? Użyjemy polecenia Get-NetTCPConnection, to nie tylko alternatywa dla starego dobrego netstat, ale dzięki PowerShell znacznie przerasta jego możliwości.
Samo polecrnie ma wiele opcji jest doskonale opisane w pomocy, my skupimy się na sprawdzonym sposobie jak wyświetlić aktywne połączenia, uzupełnić je nazwy procesów które je nawiązały oraz spróbować rozwiązać ich adresy na nazwy DNS. Zacznijmy od wyświetlenia tylko nawiązanych połączeń
Get-NetTCPConnection -State Established
Z nadmiaru informacji wybierzemy zdalny adres, zdalny port użyty w połączeniu oraz spóbujemy dowiedzieć się który proces je nawiązał:
Get-NetTCPConnection -State Established | Select-Object -Property RemoteAddress, RemotePort, OwningProcess
Samo ID procesu jest widoczne w wynikach, wystarczy zatem odczytać jego nazwę z użyciem Get-Process. Przedstawmy je jako wartość wyrażenia, zastępując OwningProcess
Get-NetTCPConnection -State Established | Select-Object -Property RemoteAddress, RemotePort, @{Label='Process'; expression={(Get-Process -id $_.owningProcess).Name}}
Spróbujmy adresy IP które pojawiają się w wynikach rozwiązać na nazwy z użyciem polecenia Resolve-DNSName, wynik przedstawmy jako wartość wyrażenia (analogicznie jak zrobiliśmy z procesami). Pozostawmy jednak w wynikach i adresy:
Get-NetTCPConnection -State Established | Select-Object -Property RemoteAddress, RemotePort, @{Label='Process'; expression={(Get-Process -id $_.owningProcess).Name}}, @{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}}
Pozostaje drobna edycja wyników (pominięcie własnego adresu) oraz formatowanie:
Get-NetTCPConnection -State Established | Select-Object -Property RemoteAddress, RemotePort, @{Label='Process'; expression={(Get-Process -id $_.owningProcess).Name}}, @{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}} | Where-Object remoteaddress -NotLike '127.0.0.1' | Format-Table -AutoSize
Możliwości są nie ograniczone, samo polecenie można wykonywać na zdalnych maszynach (Invoke-Command). Zdefiniować je jako własną funkcje i wywoływać jak prostą komendę. A odpowiednie zadanie harmonogramu może sprawdzać czy na maszynie są nawiązane połączenia przez określone procesy. Jednym słowem co tylko przyjdzie wam do głowy.
Jeżeli się dobrze postaracie użyjecie aliasów to z powyższego kodu wyjdzie wam prawdziwy one liner.