Ce script permet d’afficher la liste des enregistrements DNS « A » d’une zone qui n’ont pas d’enregistrements reverse DNS (PTR). Après affichage des enregistrements, un export CSV est réalisé permettant une exploitation plus simple dans Excel ou simplement une injection dans un autre script.
param([Parameter(Mandatory=$true)][string] $Zone, [Parameter(Mandatory=$true)][string] $DNSHost)
$records = Get-DnsServerResourceRecord -Computer $dnshost -ZoneName $zone -RRtype "A"
$output = @()
foreach($record in $records){
$ipStr = $record.RecordData.IPv4Address.ToString()
$ipB1 = $ipStr.SubString(0,$ipStr.IndexOf("."))
$ipstr = $ipstr.SubString(($ipB1.Length)+1,($ipstr.Length-$ipB1.Length)-1)
$ipB2 = $ipStr.SubString(0,$ipStr.IndexOf("."))
$ipstr = $ipstr.SubString(($ipB2.Length)+1,($ipstr.Length-$ipB2.Length)-1)
$ipB3 = $ipStr.SubString(0,$ipStr.IndexOf("."))
$ipstr = $ipstr.SubString(($ipB3.Length)+1,($ipstr.Length-$ipB3.Length)-1)
$ipB4 = $ipStr.Substring(0,$ipStr.Length)
$zoneptr = $record.RecordData.IPv4Address.ToString().SubString(0,$ipB1.Length)+".in-addr.arpa"
if($ipB1 -ne $lastzone) { $recptr = Get-DnsServerResourceRecord -Computer $dnshost -ZoneName $zoneptr }
$lastzone = $ipB1
$ipptr = $ipB4+"."+$ipB3+"."+$ipB2
if(($recptr | Where-Object { $_.HostName -like $ipptr }) -eq $null) {
Write-Host $record.HostName";"$record.RecordData.IPV4Address
$noptr = New-Object PSCustomObject
$noptr | Add-Member -Name "Hostname" -Value $record.HostName -MemberType NoteProperty
$noptr | Add-Member -Name "IPV4Address" -Value $record.RecordData.IPV4Address -MemberType NoteProperty
$output+=$noptr
}
}
$output | Export-CSV DNSnoPTR.csv -Encoding UTF8
Le script prend en paramètre ZoneName le nom de la zone DNS que l’on souhaite scanner et DnsHost le nom du serveur DNS qui renverra les enregistrements. Le script pourra donc être appelé de cette manière :
.\win_dnsnoptr.ps1 -Zone intra.dundermifflin.inc -DNSHost dc01
Comme toujours, le script avec quelques commentaires est disponible en téléchargement.