Example #1
0
    def AXFR(self, name):
        """AXFR for name

			* name -- name to AXFR for
			
			This function is a generator. As it AXFRs it will yield you the records.

			**Example**

			Let's get a list of the tlds (gotta catch em all!):

			>>> tlds = []
			>>> for rr in resolver("f.root-servers.net").AXFR("."):
			>>>    if rr.rr_type() == "NS":
			>>>       tlds.append(rr.owner())

		"""
        #Dname seems to be unecessary on some computers, but it is on others. Avoid bugs.
        if self._ldns_resolver.axfr_start(
                ldns.ldns_dname(name),
                ldns.LDNS_RR_CLASS_IN) != ldns.LDNS_STATUS_OK:
            raise Exception("Starting AXFR failed. Error: %s" %
                            ldns.ldns_get_errorstr_by_id(status))
        pres = self._ldns_resolver.axfr_next()
        while pres:
            yield resource_record(pres)
            pres = self._ldns_resolver.axfr_next()
Example #2
0
def load_key(session, environment, zone, key, ksk):
    open(environment.key_file, "w").write(key.private_key)
    res = ldns.ldns_key.new_frm_fp(open(environment.key_file, "r"))
    res.set_flags(257 if ksk else 256)
    res.set_origttl(zone.dnskey_ttl)
    res.set_pubkey_owner(ldns.ldns_dname(str(zone.apex)))
    res.set_use(True)
    return res
Example #3
0
    def add_nameserver(self, ns):
        """ Add a nameserver, IPv4/IPv6/name.

		"""
        if isValidIP(ns) == 4:
            address = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_A, ns)
            self._ldns_resolver.push_nameserver(address)
        elif isValidIP(ns) == 6:
            address = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_AAAA, ns)
            self._ldns_resolver.push_nameserver(address)
        else:
            resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")
            #address = resolver.get_addr_by_name(ns)
            address = resolver.get_addr_by_name(ldns.ldns_dname(ns))
            if not address:
                address = resolver.get_addr_by_name(ldns.ldns_dname(ns))
                if not address:
                    raise Exception("Failed to resolve address for %s" % ns)
            for rr in address.rrs():
                self._ldns_resolver.push_nameserver_rr(rr)
Example #4
0
	def add_nameserver(self,ns):
		""" Add a nameserver, IPv4/IPv6/name.

		"""
		if isValidIP(ns) == 4:
			address = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_A,ns)
			self._ldns_resolver.push_nameserver(address)
		elif isValidIP(ns) == 6:
			address = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_AAAA,ns)
			self._ldns_resolver.push_nameserver(address)
		else:
			resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")
			#address = resolver.get_addr_by_name(ns)
			address = resolver.get_addr_by_name(ldns.ldns_dname(ns))
			if not address:
				address = resolver.get_addr_by_name(ldns.ldns_dname(ns))
				if not address:
					raise Exception("Failed to resolve address for %s" % ns)
			for rr in address.rrs():
				self._ldns_resolver.push_nameserver_rr(rr)
Example #5
0
	def AXFR(self,name):
		"""AXFR for name

			* name -- name to AXFR for
			
			This function is a generator. As it AXFRs it will yield you the records.

			**Example**

			Let's get a list of the tlds (gotta catch em all!):

			>>> tlds = []
			>>> for rr in resolver("f.root-servers.net").AXFR("."):
			>>>    if rr.rr_type() == "NS":
			>>>       tlds.append(rr.owner())

		"""
		#Dname seems to be unecessary on some computers, but it is on others. Avoid bugs.
		if self._ldns_resolver.axfr_start(ldns.ldns_dname(name), ldns.LDNS_RR_CLASS_IN) != ldns.LDNS_STATUS_OK:
			raise Exception("Starting AXFR failed. Error: %s" % ldns.ldns_get_errorstr_by_id(status))
		pres = self._ldns_resolver.axfr_next()
		while pres:
			yield resource_record(pres)
			pres = self._ldns_resolver.axfr_next()
#!/usr/bin/python
#
# MX is a small program that prints out the mx records for a particular domain
#
import ldns

dname = ldns.ldns_dname("nic.cz")
print dname

resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")

pkt = resolver.query(dname, ldns.LDNS_RR_TYPE_MX, ldns.LDNS_RR_CLASS_IN)

if (pkt):
    mx = pkt.rr_list_by_type(ldns.LDNS_RR_TYPE_MX, ldns.LDNS_SECTION_ANSWER)
    if (mx):
        mx.sort()
        print mx
Example #7
0
    """
    global class_name
    global method_name
    global error_detected
    error_detected = True
    sys.stderr.write("(line %d): malfunctioning method %s.\n" % \
       (inspect.currentframe().f_back.f_lineno, method_name))


#if not error_detected:
if True:
    method_name = class_name + ".__init__()"
    rdf1 = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_DNAME, "test.nic.cz.")
    rdf2 = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_A, "217.31.205.50")
    try:
        dname = ldns.ldns_dname("www.nic.cz.")
        if not isinstance(dname, ldns.ldns_dname):
            set_error()
    except:
        set_error()
    #
    # Error when printing a dname wich was created fron an empty string.
    # Must find out why.
    #
    try:
        dname = ldns.ldns_dname(rdf1)
        if not isinstance(dname, ldns.ldns_dname):
            set_error()
    except:
        set_error()
    # Test whether rdf1 and dname independent.
Example #8
0
#!/usr/bin/python
#
# This example shows how to generate public/private key pair
#
import ldns

algorithm = ldns.LDNS_SIGN_DSA
bits = 512

ldns.ldns_init_random(open("/dev/urandom", "rb"), (bits + 7) // 8)

domain = ldns.ldns_dname("example.")

#generate a new key
key = ldns.ldns_key.new_frm_algorithm(algorithm, bits)
print key

#set owner
key.set_pubkey_owner(domain)

#create the public from the ldns_key
pubkey = key.key_to_rr()
#previous command is equivalent to
# pubkey = ldns.ldns_key2rr(key)
print pubkey

#calculate and set the keytag
key.set_keytag(ldns.ldns_calc_keytag(pubkey))

#build the DS record
ds = ldns.ldns_key_rr2ds(pubkey, ldns.LDNS_SHA1)
Example #9
0
#!/usr/bin/python
#
# This example shows how to generate public/private key pair
#
import ldns

algorithm = ldns.LDNS_SIGN_DSA
bits = 512

ldns.ldns_init_random(open("/dev/urandom","rb"), (bits+7)//8)

domain = ldns.ldns_dname("example.")

#generate a new key
key = ldns.ldns_key.new_frm_algorithm(algorithm, bits);
print key

#set owner
key.set_pubkey_owner(domain)

#create the public from the ldns_key
pubkey = key.key_to_rr()
#previous command is equivalent to
# pubkey = ldns.ldns_key2rr(key)
print pubkey

#calculate and set the keytag
key.set_keytag(ldns.ldns_calc_keytag(pubkey))

#build the DS record
ds = ldns.ldns_key_rr2ds(pubkey, ldns.LDNS_SHA1)
Example #10
0
#!/usr/bin/python
import ldns

resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")

dnn = ldns.ldns_dname("www.google.com")
print(dnn.get_type_str(), dnn)

dna = ldns.ldns_rdf.new_frm_str("74.125.43.99", ldns.LDNS_RDF_TYPE_A)
print(dna.get_type_str(), dna)

name = resolver.get_name_by_addr(dna)
if (not name): raise Exception("Can't retrieve server name")
for rr in name.rrs():
    print(rr)

name = resolver.get_name_by_addr("74.125.43.99")
if (not name): raise Exception("Can't retrieve server name")
for rr in name.rrs():
    print(rr)

addr = resolver.get_addr_by_name(dnn)
if (not addr): raise Exception("Can't retrieve server address")
for rr in addr.rrs():
    print(rr)

addr = resolver.get_addr_by_name("www.google.com")
if (not addr): raise Exception("Can't retrieve server address")
for rr in addr.rrs():
    print(rr)
Example #11
0
#!/usr/bin/python
import ldns

resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")

dnn = ldns.ldns_dname("www.google.com")
print(dnn.get_type_str(), dnn)

dna = ldns.ldns_rdf.new_frm_str("74.125.43.99",ldns.LDNS_RDF_TYPE_A)
print(dna.get_type_str(), dna)

name = resolver.get_name_by_addr(dna)
if (not name): raise Exception("Can't retrieve server name")
for rr in name.rrs():
    print(rr)

name = resolver.get_name_by_addr("74.125.43.99")
if (not name): raise Exception("Can't retrieve server name")
for rr in name.rrs():
    print(rr)

addr = resolver.get_addr_by_name(dnn)
if (not addr): raise Exception("Can't retrieve server address")
for rr in addr.rrs():
    print(rr)

addr = resolver.get_addr_by_name("www.google.com")
if (not addr): raise Exception("Can't retrieve server address")
for rr in addr.rrs():
    print(rr)
PrivateExponent: {4:s}
Prime1: {5:s}
Prime2: {6:s}
Exponent1: {7:s}
Exponent2: {8:s}
Coefficient: {9:s}""".format(str(algorithm), getAlgorithmName(algorithm),
                             format(n), format(e), format(d), format(p), format(q),
                             format(d % p_factor), format(d % q_factor), format(u)
                            )
         fw.write(file)
         fw.close()

         #construct DNSKEY and DS record
         fw = open("key.priv", "r")
         key = ldns.ldns_key.new_frm_fp(fw)
         key.set_pubkey_owner(ldns.ldns_dname(domain))
         key.set_flags(flags)
         
         pubkey = key.key_to_rr()
         ds = ldns.ldns_key_rr2ds(pubkey, getDigestType(algorithm))

         owner, algo, tag = pubkey.owner(), str(algorithm).zfill(3), key.keytag()
         
         fw = open(sys.argv[1] + "/K%s+%s+%d.key" % (owner,algo,tag), "wb")
         pubkey.print_to_file(fw)

         fw = open(sys.argv[1] + "/K%s+%s+%d.private" % (owner,algo,tag), "wb")
         key.print_to_file(fw)

         fw = open(sys.argv[1] + "/K%s+%s+%d.ds" % (owner,algo,tag), "wb")
         ds.print_to_file(fw)
Example #13
0
#if not error_detected:
if True:
    method_name = class_name + ".new()"
    try:
        pkt = ldns.ldns_pkt.new()
        if not isinstance(pkt, ldns.ldns_pkt):
            set_error()
    except:
        set_error()


#if not error_detected:
if True:
    method_name = class_name + ".new_query()"
    dname = ldns.ldns_dname("test.nic.cz.")
    try:
        pkt = ldns.ldns_pkt.new_query(dname, ldns.LDNS_RR_TYPE_A, ldns.LDNS_RR_CLASS_IN, ldns.LDNS_QR | ldns.LDNS_RD)
        if not isinstance(pkt, ldns.ldns_pkt):
            set_error()
    except:
        set_error()
    rdf = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_DNAME, "test.nic.cz.")
    try:
        pkt = ldns.ldns_pkt.new_query(rdf, ldns.LDNS_RR_TYPE_A, ldns.LDNS_RR_CLASS_IN, ldns.LDNS_QR | ldns.LDNS_RD)
        if not isinstance(pkt, ldns.ldns_pkt):
            set_error()
    except:
        set_error()
    try:
        pkt = ldns.ldns_pkt.new_query("bad argument", ldns.LDNS_RR_TYPE_A, ldns.LDNS_RR_CLASS_IN, ldns.LDNS_QR | ldns.LDNS_RD)
Example #14
0
    except:
        set_error()


#if not error_detected:
if True:
    method_name = class_name + ".domain()"
    resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")
    resolver.set_domain(None)
    try:
        ret = resolver.domain()
        if ret != None:
            set_error()
    except:
        set_error()
    dname = ldns.ldns_dname("example.com.")
    resolver.set_domain(dname)
    try:
        ret = resolver.domain()
        if not isinstance(ret, ldns.ldns_dname):
            set_error()
        if ret != dname:
            set_error()
    except:
        set_error()


#if not error_detected:
if True:
    method_name = class_name + ".edns_udp_size()"
    try:
Example #15
0
#!/usr/bin/python
#
# MX is a small program that prints out the mx records for a particular domain
#
import ldns

dname = ldns.ldns_dname("nic.cz")
print(dname)

resolver = ldns.ldns_resolver.new_frm_file("/etc/resolv.conf")

pkt = resolver.query(dname, ldns.LDNS_RR_TYPE_MX,ldns.LDNS_RR_CLASS_IN)

if (pkt):
    mx = pkt.rr_list_by_type(ldns.LDNS_RR_TYPE_MX, ldns.LDNS_SECTION_ANSWER)
    if (mx):
       mx.sort()
       print(mx)
Example #16
0
    """
    global class_name
    global method_name
    global error_detected
    error_detected = True
    sys.stderr.write("(line %d): malfunctioning method %s.\n" % \
       (inspect.currentframe().f_back.f_lineno, method_name))


#if not error_detected:
if True:
    method_name = class_name + ".__init__()"
    rdf1 = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_DNAME, "test.nic.cz.")
    rdf2 = ldns.ldns_rdf_new_frm_str(ldns.LDNS_RDF_TYPE_A, "217.31.205.50")
    try:
        dname = ldns.ldns_dname("www.nic.cz.")
        if not isinstance(dname, ldns.ldns_dname):
            set_error()
    except:
        set_error()
    #
    # Error when printing a dname wich was created fron an empty string.
    # Must find out why.
    #
    try:
        dname = ldns.ldns_dname(rdf1)
        if not isinstance(dname, ldns.ldns_dname):
            set_error()
    except:
        set_error()
    # Test whether rdf1 and dname independent.