# PCS Toolkit - Network Scanner # Scans local network for active hosts and open ports param( [string]$Subnet = "", [int[]]$Ports = @(21, 22, 23, 80, 135, 139, 443, 445, 3389, 5900, 8080) ) # Setup logging $timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" $logFile = "$env:USERPROFILE\Desktop\NetworkScan_$timestamp.log" $csvFile = "$env:USERPROFILE\Desktop\NetworkScan_$timestamp.csv" function Log($msg) { $line = "$(Get-Date -Format 'HH:mm:ss') - $msg" Write-Host $line Add-Content $logFile $line } Log "========================================" Log " PCS Toolkit - Network Scanner" Log "========================================" Log "Log file: $logFile" # Auto-detect subnet if (-not $Subnet) { $ip = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.PrefixOrigin -ne "WellKnown" -and $_.IPAddress -notlike "169.*" -and $_.IPAddress -ne "127.0.0.1" } | Select-Object -First 1).IPAddress if ($ip) { $parts = $ip.Split('.') $Subnet = "$($parts[0]).$($parts[1]).$($parts[2])" Log "Auto-detected subnet: $Subnet.0/24 (from IP: $ip)" } else { Log "ERROR: Could not detect subnet" Read-Host "Press Enter to exit" exit } } Log "Scanning $Subnet.1-254" Log "Ports: $($Ports -join ', ')" Log "Starting scan..." $results = @() $total = 254 $found = 0 for ($i = 1; $i -le 254; $i++) { $ip = "$Subnet.$i" $pct = [math]::Round(($i / $total) * 100) Write-Progress -Activity "Scanning network" -Status "$ip ($pct%)" -PercentComplete $pct # Quick ping test (1 second timeout) $ping = Test-Connection -ComputerName $ip -Count 1 -Quiet -TimeoutSeconds 1 if ($ping) { $found++ Log "[$found] FOUND: $ip - Host is UP" $hostname = "" try { $hostname = ([System.Net.Dns]::GetHostEntry($ip)).HostName Log " Hostname: $hostname" } catch { } $openPorts = @() foreach ($port in $Ports) { $tcp = New-Object System.Net.Sockets.TcpClient try { $connect = $tcp.BeginConnect($ip, $port, $null, $null) $wait = $connect.AsyncWaitHandle.WaitOne(300, $false) if ($wait -and $tcp.Connected) { $openPorts += $port Log " Port $port: OPEN" } } catch { } finally { $tcp.Close() } } $results += [PSCustomObject]@{ IP = $ip Hostname = $hostname OpenPorts = ($openPorts -join '; ') Status = "Up" } } } Write-Progress -Activity "Scanning network" -Completed Log "" Log "========================================" Log "SCAN COMPLETE" Log "Found $found active hosts out of 254 scanned" Log "========================================" if ($results.Count -gt 0) { $results | Export-Csv -Path $csvFile -NoTypeInformation Log "Results saved to: $csvFile" Log "" Log "SUMMARY:" $results | ForEach-Object { Log " $($_.IP) - $($_.Hostname) - Ports: $($_.OpenPorts)" } } Log "" Log "Log saved to: $logFile" explorer.exe "/select,$logFile" Read-Host "Press Enter to exit"