Get Mail Related DNS Entrys with Powershell

Hallo zusammen,

Ich musste heute bei einem Kunden bei über 140 Domains die DNS Einträge zusammensuchen. Habe mir dafür ein kleines Script geschrieben.

Aus einem CSV mit den Domain Namen werden folgende Infos über DNS abgefragt:

  • Nameserver (NS)
  • Mail Exchanger/Mailserver (MX)
  • SenderPolicyFramework (SPF)
  • DomainKeysIdentifiedMail (DKIM)
  • DMARC

Das ganze ist auf die DNS Records von Microsoft 365 abgestimmt. Also nicht böse sein, wenn es anderweitig nicht klappt.

Und so sieht das Resultat dann hinterher im Excel aus.

Hier das PowerShell Script

###############################################################################
# CheckDNSDomain.ps1
# Query Public DNS for Mail Related DNS Records
# 20.11.2020 V1.0 Initial Version - Andres Bohren
###############################################################################
#CSV Excample
#DomainName;NS;MX;SPF;DKIM;DMARC;Owner;TechContact
#example.com;;;;;;;
#
#For Whois use Sysinternals Whois
#https://docs.microsoft.com/en-us/sysinternals/downloads/whois

###############################################################################
# Open File Dialog
###############################################################################
Function Get-FileDialog {
 PARAM (
  [string]$initialDirectory
 )
 Write-Host "Choose CSV File" -f Green
 [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null
 $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
 $OpenFileDialog.initialDirectory = $initialDirectory
 $OpenFileDialog.ShowHelp = $true
 $OpenFileDialog.filter = "All files (*.*)| *.*"
 $show = $OpenFileDialog.ShowDialog()
 If ($Show -eq "OK") { 
  Return $OpenFileDialog.FileName
 }
}

###############################################################################
# MainScript
###############################################################################

#Get CSV File
$CSVFile = Get-FileDialog -InitialDirectory $PSScriptRoot

$CSV = Import-CSV -Path $CSVFile -delimiter ";"
$Int = 0
Foreach ($Line in $CSV)
{
            $Int = $INT + 1
            $Domain = $Line.DomainName
            Write-Host "Working On: $Domain [$int]" -ForegroundColor Green

            #NS
            Write-Host "NS"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=$Domain&type=NS"
            [string]$NS = $json.Answer.data

            #MX
            Write-Host "MX"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=$Domain&type=MX"
            [string]$MX = $json.Answer.data

            #SPF
            Write-Host "SPF"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=$Domain&type=TXT"
            $TXT = $json.Answer.data
            $TXT = $TXT | where {$_ -match "v=spf1"}
            $SPF = $TXT


            #DKIM
            Write-Host "DKIM"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=Selector1._domainkey.$Domain&type=CNAME"
            $DKIM1 = $json.Answer.data
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=Selector2._domainkey.$Domain&type=CNAME"
            $DKIM2 = $json.Answer.data
            [string]$DKIM = "$DKIM1 $DKIM2"

            #DMARC
            Write-Host "DMARC"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=_dmarc.$Domain&type=TXT"
            $DMARC = $json.Answer.data
           
            #Add to CSV Object
            $Line.NS = $NS
            $Line.MX = $MX
            $Line.SPF = $SPF
            $Line.DKIM = $DKIM
            $Line.DMARC = $DMARC
}
$CSV | Export-CSV -Path $CSVFile -NoTypeInformation -Encoding UTF8 -Delimiter ";"

Wer will, kann noch die Whois Informationen eintragen.

For Whois use Sysinternals Whois
https://docs.microsoft.com/en-us/sysinternals/downloads/whois

whois.exe <domain> -accepteula

Die Whois Abfragen laufen auf TCP Port 43. Musste ich erst noch auf der Firewall aufmachen.

Grüsse
Andres Bohren