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.