Solved

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

Posted on 2008-06-11
4
883 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 250 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

Independent Software Vendors: 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

Suggested Solutions

Title # Comments Views Activity
server is not seen in network 12 83
Cookies and new tab 3 68
Questions about DHCP migration 5 101
Configuring DAG with different CU level ? 6 42
I previously wrote an article addressing the use of UBCD4WIN and SARDU. All are great, but I have always been an advocate of SARDU. Recently it was suggested that I go back and take a look at Easy2Boot in comparison.
Configuring network clients can be a chore, especially if there are a large number of them or a lot of itinerant users.  DHCP dynamically manages this process, much to the relief of users and administrators alike!
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa‚Ķ

763 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