I have hardcoded the valid IPs in CIDR (33 to 38) in foreach loop which can be replaced by two variables taken in as input from the user or by customizing it.
function Port-Scan
{
write-host "Scanning for IP range 10.10.0.32/29"
write-host "Enter start port: "
$inputstr1 = read-host
$port1 = $inputstr1 -as [Int32]
write-host "Enter end port: "
$inputstr2 = read-host
$port2 = $inputstr2 -as [Int32]
write-host ""
write-host "Scanning Started..."
write-host ""
$ErrorActionPreference= âsilentlycontinueâ
$counter = 0
$negcounter = 0
foreach($range in 33..38)
{
write-host "Scanning IP ========= 10.10.0.$range"
foreach($port in $port1..$port2)
{
If(Test-Connection âBufferSize 32 âCount 1 âquiet âComputerName "10.10.0.$range")
{
$socket = new-object System.Net.Sockets.TcpClient("10.10.0.$range", $port)
If($socket.Connected)
{
write-host â port $port openâ -ForegroundColor Green
$socket.Close()
$counter += 1
}
else
{
$negcounter += 1
}
}
else
{
write-host " 10.10.0.$range is not up!" -ForegroundColor Red
break
}
}
write-host "$counter ports open on host 10.10.0.$range"
write-host "$negcounter ports closed on host 10.10.0.$range"
write-host ""
$counter = 0
$negcounter = 0
}
write-host ""
write-host "Scanning Ended"
}