Public/Internet/Get-RegistrarInfo.ps1
<#
Copyright © 2024 Integris. For internal company use only. All rights reserved. #> FUNCTION Get-RegistrarInfo { <# .SYNOPSIS Retrieves registrar information for a domain. .DESCRIPTION Retrieves registrar information for a domain. .PARAMETER Domain Specifies the domains to retrieve registrar info for. .EXAMPLE Get-StorageInfo IntegrisIT.com This command retrieves and displays registrar information for the specified domain(s). #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [ValidateScript({ if ($_ -match "^\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b$") { $true } else { throw "Invalid FQDN format." } })] [STRING[]]$Domain ) $whoisPort = 43 $OutputFormat = "summary" FUNCTION Find-WhoisServer { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [ValidateScript({ if ($_ -match "^\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b$") { $true } else { throw "Invalid DomainName format." } })] [string]$Domain ) $tld = $Entry.Split(".")[-1] $whoisDnsServersForTld = Resolve-DnsName "$tld.whois-servers.net" | Select-Object -Property * $whoisDnsServersForTld | Where-Object IPAddress } $TotalCount = $Domain.Count $CurrentCount = 0 $Results = @() FOREACH ($Entry in $Domain) { Write-IntegrisProgressBar -TotalCount $TotalCount -CurrentCount $CurrentCount -Activity "Getting Registrar Info" -Status "Getting Registrar Info for [$Entry]" -ID 345916832 $CurrentCount++ if (-NOT $whoisServer) { # Set the appropriate WHOIS server and port based on the TLD of the domain name $whoisDnsServers = Find-WhoisServer -Domain $Entry $wServer = $whoisDnsServers | Where-Object IP4Address | Select-Object -first 1 } else { $wServer = Resolve-DnsName $whoisServer | Where-Object IP4Address | Select-Object -first 1 } # Get the IP address of the WHOIS server $wServerIP = ($wServer | Where-Object IP4Address).IP4Address | Select-Object -first 1 # Get the name of the WHOIS server $wServerName = ($wServer | Where-Object IP4Address | Select-Object -first 1).Name # Query the WHOIS server for the domain name $whoisQuery = $Entry + "`r`n" $whoisSocket = New-Object System.Net.Sockets.TcpClient($wServerIP, $whoisPort) $whoisStream = $whoisSocket.GetStream() $whoisWriter = New-Object System.IO.StreamWriter($whoisStream) $whoisWriter.WriteLine($whoisQuery) $whoisWriter.Flush() $whoisReader = New-Object System.IO.StreamReader($whoisStream) $whoisResponse = $whoisReader.ReadToEnd() $whoisReader.Close() $whoisWriter.Close() $whoisSocket.Close() if ($OutputFormat -eq "summary") { # Remove blank lines $whoisResponse = $whoisResponse -replace "`r`n`r`n", "`r`n" # Split whoisResponse into lines and parse the WHOIS response for the basic information $whoisResponse = $whoisResponse -split "`r`n" $Registrar = $whoisResponse | Select-String -Pattern "Registrar: " | Select-Object -First 1 $Registrar = $registrar -replace "Registrar:", "" $Registrar = $registrar -replace "[\s-[\r\n]]+", "" Try { $CreationDate = $whoisResponse | Select-String -Pattern "Creation Date: " | Select-Object -First 1 $CreationDate = $CreationDate -replace "Creation Date:", "" $CreationDate = Get-Date $CreationDate } CATCH { $CreationDate = $whoisResponse.Split("`r`n") | Select-String -Pattern "Domain record activated: " | Select-Object -First 1 $CreationDate = ($CreationDate.ToString() -Replace ("Domain record activated:","")) $CreationDate = ($CreationDate -Replace (" ","")) $CreationDate = Get-Date $CreationDate } Try { $ExpirationDate = $whoisResponse | Select-String -Pattern "Registry Expiry Date: " | Select-Object -First 1 $ExpirationDate = $ExpirationDate -replace "Registry Expiry Date:", "" $ExpirationDate = Get-Date $ExpirationDate } Catch { } try { $DaysUntilExpiration = (New-TimeSpan -Start (Get-Date) -End (Get-Date $ExpirationDate)).Days } catch { } $NameServers = $whoisResponse | Select-String -Pattern "Name Server: " | Select-Object -Unique $NameServers = $NameServers -replace "Name Server:", "" $NameServers = $NameServers -replace "[\s-[\r\n]]+", "" $Results += New-Object PSObject -WarningAction SilentlyContinue -Property @{ PSTypeName = 'IntegrisPowerShell.RegistrarInfo' Domain = $Entry Registrar = $Registrar CreationDate = $CreationDate ExpirationDays = $DaysUntilExpiration ExpirationDate = $ExpirationDate NameServers = @($NameServers) WhoisServerName = $wServerName } } } Write-Progress -PercentComplete 100 -Activity "Getting Registrar Info" -Status "Getting Registrar Info for [$Entry]" -ID 345916832 -Completed RETURN $Results } |