PowerShell: Sprawdzanie aktywnych połączeń TCP/IP – alternatywa dla netstat

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.