Process Port Discovery
Methodologies and Theory
The Script
Source Code
param (
[string]$pname,
[string]$prange,
[string]$verbose
)
function EnumerateProcessesOnPorts {
param (
[string]$processName,
[string]$portRange
)
$ports = $portRange.Split("-")
$sp = [int]$ports[0]
$ep = [int]$ports[1]
if ($sp -eq 0) {
Write-Host "[+] | Start range being set to 1" -ForegroundColor Red -BackgroundColor Black
$sp = 1;
}
if ($ep -eq 0) {
Write-Host "[+] | End range being set to 65535" -ForegroundColor Red -BackgroundColor Black
$ep = 65535;
}
$noProcessCount = 0
$errorCount = 0
$processedPorts = 0
for ($port = $sp; $port -le $ep; $port++) {
try {
$processId = (Get-NetTCPConnection -LocalPort $port -ErrorAction Stop).OwningProcess
if ($processId) {
$owningProcess = Get-Process -Id $processId
if ($owningProcess.ProcessName -eq $processName) {
Write-Host "`n[+] | Process with ID ($processId) ($($owningProcess.ProcessName)) is using port [$port]" -ForegroundColor White -BackgroundColor Black
} else {
Write-Host "`n[*] | Port $port is being used by a different process ($($owningProcess.ProcessName))" -ForegroundColor Yellow -BackgroundColor Black
}
} else {
$processedPorts++
if ($verbose -eq "true") {
$noProcessCount++
Write-Host -NoNewline "`r[!] | No process is using port $port. (NoProcCount: $noProcessCount, NonExistent: $errorCount, Ports Processed: $processedPorts)" -ForegroundColor Red -BackgroundColor Black
}
}
} catch {
$processedPorts++
$errorCount++
if ($verbose -eq "true") {
#$($_.Exception.Message)
Write-Host -NoNewline "`r[!] | Port being processed '$port' (NoProcCount: $noProcessCount, NonExistent: $errorCount, Ports Processed: $processedPorts)" -ForegroundColor Red -BackgroundColor Black
}
}
}
}
function Helpmen {
cls
Write-Host "|----------------------PortDetection---------------------------|"
Write-Host "| Usage | AutoPortDetect.ps1 -pname"
Write-Host "| <process_name>"
Write-Host "| -prange"
Write-Host "| start-end"
Write-Host "| -verbose"
Write-Host "| true || false"
Write-Host "|"
Write-Host "| Demo | AutoPortDetect.ps1 -pname SkyOverlay -prange 8080-8090"
}
function Main {
param (
[string]$processName = "",
[string]$portRange = "8080-8090"
)
if ($processName -eq "") {
Helpmen
} else {
EnumerateProcessesOnPorts -processName $processName -portRange $portRange
}
}
Main -processName $pname -portRange $prangeUsage
Demonstration

Last updated
