Podręczny skaner portów w PowerShellu
Ten dość nieelegancki oneliner to bardzo prosta implementacja skanera portów TCP, który spróbuje się podłączyć na wskazane porty ( 22,443,2083,8880,31337) hosta berkeley.edu.
Rozkładająć go na części pierwsze, mamy:
Przykładowe użycie, mogłoby wyglądać tak:
Jak to działa — krok po kroku
Rozłóżmy onelinera na czynniki pierwsze:
22,443,2083,8880,31337
tablica reprezentująca interesujące nas porty TCP,
|% { ... }
wysłanie elementów tablicy do bloku skryptu umieszczonego w nawiasie klamrowym; dla przypomnienia, % to alias na ForEach-Object,
"$_ - "+([Net.Sockets.TcpClient]::new()).ConnectAsync("berkeley.edu", $_).Wait(1000)
dla każdego numeru portu zawartego w zmiennej $_ następuje próba połączenia ze wskazanym hostem z wykorzystaniem obiektu klasy Net.Sockets.TcpClient. Dzięki wykorzystaniu metody ConnectAsync skrypt nie blokuje się, więc sami za pomocą metody Wait określamy jak długo chcemy czekać na połączenie,
2>$null
połączenie może się nie udać, natomiast nie interesuje nas komunikat błędu lecz zwracany status (który niejawnie rzutujemy na string), a więc strumień wyjścia błędów (strumień u numerze 2) przekierowujemy do zmiennej $null czyli w nicość.