ALPHACON BBSGość · pl
← Protipy

Protipy / PowerShell

Podręczny skaner portów w PowerShellu

22,443,2083,8880,31337|%{"$_ - "+([Net.Sockets.TcpClient]::new()).ConnectAsync("berkeley.edu", $_).Wait(1000)}2>$null

Wstęp

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:

Breakdown

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ść.

Linki