VBScript: Microsoft DNS-Server Einträge bearbeiten

Mit Hilfe der “DNS WMI Services” kann der Microsoft DNS Server verwaltet werden. Dies ermöglicht das Erstellen von Skripts zum Hinzufügen, Löschen oder Editieren von Zonen und Records.

Um mit den “DNS WMI Klassen” zu arbeiten sind folgende Schritte notwendig:

  1. WMI Service initiieren (remote oder lokal)
  2. Mit Hilfe des WMI Service kann dann die benötigte “DNS WMI Klasse” instanziiert werden

Lokalen WMI Service initiieren:


Dim objWMIService: Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\MicrosoftDNS")

Remote WMI Service initiieren:


Dim objSWbemLocator: Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Dim objWMIService: Set objWMIService = objSWbemLocator.ConnectServer(hostIP, _ 
		"root\MicrosoftDNS", _ 
		username, _ 
		password, _ 
		"", _ 
		"") 	

Die Parameter:

  • hostIP = IP des DNS-Server
  • username = Benutzername
  • password = Passwort

Neue “Primary-Zone” erstellen:


Dim objDNSZone: Set objDNSZone = objWMIService.Get("MicrosoftDNS_Zone")
objDNSZone.CreateZone(zoneName,0)

Bedeutung der Parameter:

  • zoneName = Name der neuen Zone (monsterli.ch, switch.ch, usw.)
  • 0 = Zone des Typs: “primary zone”

Neue “Secondary-Zone” erstellen:


Dim objDNSZone: Set objDNSZone = objWMIService.Get("MicrosoftDNS_Zone")
objDNSZone.CreateZone(zoneName,1,false,zoneName & "dns",array(nsMasterIP))

Dabei sind die Parameter:

  • zoneName = Name der neuen Zone (Domain)
  • 1 = Zone des Typs: “secondary zone”
  • false = keine “AD integrated zone”
  • zoneName & “dns” = Name der Zonendatei
  • array(nsMasterIP) = Array mit der IP des primären Server dieser Zone

Neuer A-Record erstellen:


Dim objItem: Set objItem = objWMIService.Get("MicrosoftDNS_AType")
objItem.CreateInstanceFromPropertyData(masterDNSServer, zoneName, subZoneName , 1, 600, hostIP)

Die Parameter:

  • masterDNSServer = IP des primären Server
  • zoneName = Name der Zone (Domain)
  • subZoneName = gewünschter Hostname (www, mail, ftp… usw.)
  • 1 = Record Class IN (Internet)
  • 600 = TTL in Sekunden
  • hostIP = IP-Adresse des Hosts

Um weitere Records wie NS, MX, CNAME, usw. zu erstellen, muss einfach die “DNS WMI Class” geändert werden.

Zone löschen:

Um eine bestehende Zone zu löschen wird mit Hilfe der “.Get” Funktion des WMI-Service die Zone selektiert und gelöscht.


Dim objServer: set objServer = objWMIService.Get("MicrosoftDNS_Server.name="".""")
Dim objItem: Set objItem = objWMIService.Get("MicrosoftDNS_Zone.ContainerName=""" & zoneName & """,DnsServerName=""" & objServer.name & """,Name=""" &  zoneName & """")
if isObject(objItem) then
	objItem.delete_
end if

Benutzte Parameter:

  • zoneName = Name der Zone die gelöscht werden soll
  • objServer.name = Name des verwendeten DNS-Server
  • zoneName = Name der Zone die gelöscht werden soll

Nützliche Links

DNS WMI Provider Samples—Managing DNS Zones

DNS – Blacklists abfragen mit Python

Ein einfaches Python-Skript zum Abfragen von DNS-Blacklists, welche adressbasiert sind.
Bei adressbasierten Blacklists wird die zu überprüfende IP-Adresse, in umgekehrter Reihenfolge, an die Domain angehängt. Dann wird eine DNS-Abfrage auf einen A-Record gestartet. Wird ein A-Record zurück geliefert, gilt die IP-Adresse als gelistet. Der A-Record wird eine IP vom Typ 127.0.0.x aufweisen.

Wenn man wissen möchte warum eine IP-Adresse in die Liste aufgenommen wurde, kann der TXT-Record abgefragt werden. In diesem Record wird vom Blacklist Betreiber oft der Grund für die Aufnahme hinterlegt.


SHOW_DEBUG_MSG = 0

import string
import sys
import socket

'''
@return: 0    If the ip-address is not blacklisted
@return: 1    If the ip-address is blacklisted
'''
def checkIfBlacklisted( ip, blacklistURL):
if SHOW_DEBUG_MSG: print "Checking %s on %s" %(ip,blacklistURL)

# turn ip "a.b.c.d" into "d.c.b.a.DNS_BLACKLIST_DOMAIN"
iplist = string.split(ip, ".")
iplist.reverse()
ip = string.join(iplist, ".")
ip += "." + blacklistURL

try:
#if blacklisted, we receive a IP in the range 127.0.0.x
ret = socket.gethostbyname( ip )
if SHOW_DEBUG_MSG: print "Blacklisted! returned: %s" %ret
return 1
except socket.gaierror, message:
if SHOW_DEBUG_MSG: print "Not blacklisted [%s]" % message
return 0

if __name__ == "__main__":
if len(sys.argv) > 2:
print checkIfBlacklisted( sys.argv[1] , sys.argv[2])

DNSBlacklistChecker.py

Zum Ausführen:


python script x.x.x.x zen.spamhaus.org

Mögliche Blacklists:

  • no-more-funn.moensted.dk
  • dnsbl.sorbs.net
  • zen.spamhaus.org
  • spews.dnsbl.net.au
  • dnsbl.NJABL.org
  • proxies.relays.monkeys.com
  • list.dsbl.org