Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

How to programatically query DNS for records soon to expire / be scavenged?

Posted on 2008-06-11
4
Medium Priority
?
890 Views
Last Modified: 2013-12-01
I would like to know if there is a way I can programatically query a windows based DNS server for records that have failed to be reregistered in a certain time frame and thus up for expiration and scavenging?

Is there a query-language for DNS? How does one use it to find this sort of information?

An example would be wonderful in c# or vb or a scripting language... anything, really.
0
Comment
Question by:DefyFate05
  • 3
4 Comments
 
LVL 71

Expert Comment

by:Chris Dent
ID: 21773436

Hey there,

It's all exposted in WMI.

I have VbScript or PowerShell versions to find this kind of thing. The PowerShell version is a hell of a lot neater / more flexible / more reliable.

Copy and paste this, fixing the Domain Name and Server Name.

Listing All Stale Records within a given Domain:

$DNSServer = "YourServerName"
$Domain = "YourDomain"

Get-WMIObject -Class "MicrosoftDNS_AType" -Namespace `
    "root\MicrosoftDNS" -Comp $DNSServer -Filter "DomainName='$Domain'" | `
    Select-Object `
    OwnerName,@{n="TimeStamp";e={(Get-Date("01/01/1601")).AddHours($_.TimeStamp)}} `
    | ?{($_.TimeStamp -lt ((Get-Date).AddDays(-14))) -and ($_.TimeStamp -ne (Get-Date("01/01/1601")))}

Note the use of "AddDays(-14)", that means we're only looking for entries where the TimeStamp is more than 14 days old, it assumes you're using 7 Days No-Refresh and 7 Days Refresh, change as appropriate.

HTH

Chris
0
 
LVL 71

Expert Comment

by:Chris Dent
ID: 21773447

Oh yeah, just for interest, this is a modification of it to show Static Records:

$DNSServer = "YourServerName"
$Domain = "YourDomain"

Get-WMIObject -Class "MicrosoftDNS_AType" -Namespace `
    "root\MicrosoftDNS" -Comp $DNSServer -Filter "DomainName='$Domain'" | `
    Select-Object `
    OwnerName,@{n="TimeStamp";e={(Get-Date("01/01/1601")).AddHours($_.TimeStamp)}} `
    | ?{$_.TimeStamp -eq (Get-Date("01/01/1601"))}

TimeStamp is always 0 for Static Records, so the adjusted time always ends up being 01/01/1601.

Chris
0
 

Author Comment

by:DefyFate05
ID: 21775939
Can you throw the vbscript version up?

0
 
LVL 71

Accepted Solution

by:
Chris Dent earned 1000 total points
ID: 21776839

Certainly, here we go.

Chris
' No-Refresh + Refresh
Const MAXIMUM_AGE = 4
 
' DNS Server Name ("." if run locally)
Const SERVER_NAME = "."
 
' Domain Name to check 
' WMI query returns A records from all zones without WHERE filter
' Domain Name should be lower case and should not include trailing "."
Const DOMAIN_NAME = "domain.local"
 
Set objWMIService = GetObject("winmgmts:\\" & SERVER_NAME & "\root\MicrosoftDNS")
 
Set colItems = objWMIService.ExecQuery("SELECT * FROM MicrosoftDNS_AType WHERE " &_
        "DomainName='" & DOMAIN_NAME & "'")
 
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFile = objFileSystem.OpenTextFile("StaleRecords.csv", 2, True, 0)
 
objFile.WriteLine "FQDN,IPAddress,TimeStamp"
 
For Each objItem In colItems
	' If InStr(1, objItem.DomainName, DOMAIN_NAME, VbTextCompare) > 0 Then
	        If objItem.TimeStamp > 0 Then
        	        dtmTimeStamp = DateAdd("h", objItem.TimeStamp, "1/1/1601 00:00:00 AM")
 
 
 	               If dtmTimeStamp <= (Date - MAXIMUM_AGE) Then
                	        objFile.WriteLine objItem.OwnerName & "," & objItem.IPAddress &_
        	                        "," & dtmTimeStamp
	                End If
        	End If
	' End If
Next
 
Set objFile = Nothing
Set objFileSystem = Nothing
 
Set colItems = Nothing
Set objWMIService = Nothing

Open in new window

0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A while back when OPSMGR 2012 was released we were very excited about getting it into our environment and upgrading our 2007 implementation,  we started our planning and we then proceeded with our implementation. All went as planned & our system …
I originally wrote this article to compare SARDU and YUMI, but have now added Easy2Boot, since that is the one I currently use and find the easiest to create and alter.
Finding and deleting duplicate (picture) files can be a time consuming task. My wife and I, our three kids and their families all share one dilemma: Managing our pictures. Between desktops, laptops, phones, tablets, and cameras; over the last decade…
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…

782 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question