I've compiled this script from various sources and tweaked it to the current state. It has been helpful in scanning a list of IP addresses on a port you specify (443, 8443, etc.) and returning the information in a CSV file. This has been quite useful when a certificate management solution is not in place.
This script goes through the IPs pretty quickly and I scanned a list of 35k IP addresses in 6 hours.
Param($IP,$port,$timeout)
$requestCallback = $state = $null
$client = New-Object System.Net.Sockets.TcpClient
$beginConnect = $client.BeginConnect($IP,$port,$requestCallback,$state)
Start-Sleep -milli $timeOut
if ($client.Connected) { $open = $true } else { $open = $false }
$client.Close()
[pscustomobject]@{IP=$IP;port=$port;open=$open}
}
$Port=443
$Timeout=300
Import-csv C:\temp\ips.txt|foreach-object{
write-host $_.IP
$IP = $_.IP
$test=testport -IP $IP -port $Port -timeout $Timeout
If($test.open -eq "True"){
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
$url = "https://" + $IP
$req = [Net.HttpWebRequest]::Create($url)
$req.Timeout=2000
$req.GetResponse() | Out-Null
$output = [PSCustomObject]@{
IPAddress = $IP
'StartDate' = $req.ServicePoint.Certificate.GetEffectiveDateString()
'EndDate' = $req.ServicePoint.Certificate.GetExpirationDateString()
'Subject' = $req.ServicePoint.Certificate.subject
}
#write-host $output
$output|export-csv C:\temp\certresults.csv -notypeinformation -append
$output=$null
}
$output=$null
}