diff options
Diffstat (limited to 'libunbound/python/doc/examples')
| -rw-r--r-- | libunbound/python/doc/examples/example1a.rst | 45 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example1b.rst | 44 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example2.rst | 64 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example3.rst | 9 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example4.rst | 46 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example5.rst | 17 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example6.rst | 12 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example7.rst | 33 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/example8.rst | 44 | ||||
| -rw-r--r-- | libunbound/python/doc/examples/index.rst | 16 | 
10 files changed, 188 insertions, 142 deletions
| diff --git a/libunbound/python/doc/examples/example1a.rst b/libunbound/python/doc/examples/example1a.rst index 3c81547f2948..f46cb92f47e8 100644 --- a/libunbound/python/doc/examples/example1a.rst +++ b/libunbound/python/doc/examples/example1a.rst @@ -1,26 +1,33 @@  .. _example_resolve_name: -==============================  Resolve a name -============================== +============== -This basic example shows how to create a context and resolve a host address (DNS record of A type). +This basic example shows how to create a context and resolve a host address +(DNS record of A type). + +Source code +-----------  :: -	#!/usr/bin/python -	import unbound -	 -	ctx = unbound.ub_ctx() -	ctx.resolvconf("/etc/resolv.conf") -	 -	status, result = ctx.resolve("www.google.com") -	if status == 0 and result.havedata: -		print "Result.data:", result.data.address_list -	elif status != 0: -		print "Resolve error:", unbound.ub_strerror(status) - -In contrast with C API, the source code is more compact while the performance of C implementation is preserved.  -The main advantage is that you need not take care about the deallocation and allocation of context and result structures; pyUnbound module do it automatically for you.  - -If only domain name is given, the :meth:`unbound.ub_ctx.resolve` looks for A records in IN class. +    #!/usr/bin/python +    import unbound + +    ctx = unbound.ub_ctx() +    ctx.resolvconf("/etc/resolv.conf") + +    status, result = ctx.resolve("www.google.com") +    if status == 0 and result.havedata: +        print "Result.data:", result.data.address_list +    elif status != 0: +        print "Resolve error:", unbound.ub_strerror(status) + +In contrast with the C API, the source code is more compact while the +performance of C implementation is preserved.  +The main advantage is that you need not take care about the deallocation and +allocation of context and result structures; pyUnbound module does it +automatically for you.  + +If only domain name is given, the :meth:`unbound.ub_ctx.resolve` looks for +A records in IN class. diff --git a/libunbound/python/doc/examples/example1b.rst b/libunbound/python/doc/examples/example1b.rst index ea1e6f57de65..1adae2cb1298 100644 --- a/libunbound/python/doc/examples/example1b.rst +++ b/libunbound/python/doc/examples/example1b.rst @@ -1,33 +1,37 @@  .. _example_reverse_lookup: -==============================  Reverse DNS lookup -============================== +================== -Reverse DNS lookup involves determining the hostname associated with a given IP address. +Reverse DNS lookup involves determining the hostname associated with a given IP +address.  This example shows how reverse lookup can be done using unbound module.  For the reverse DNS records, the special domain in-addr.arpa is reserved.  -For example, a host name for the IP address 74.125.43.147 can be obtained by issuing a DNS query for the PTR record for address 147.43.125.74.in-addr.arpa. +For example, a host name for the IP address ``74.125.43.147`` can be obtained +by issuing a DNS query for the PTR record for address +``147.43.125.74.in-addr.arpa.`` + +Source code +-----------  :: -	#!/usr/bin/python -	import unbound -	 -	ctx = unbound.ub_ctx() -	ctx.resolvconf("/etc/resolv.conf") -	 -	status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) -	if status == 0 and result.havedata: -		print "Result.data:", result.data.domain_list -	elif status != 0: -		print "Resolve error:", unbound.ub_strerror(status) - -In order to simplify the python code, unbound module contains function which reverses the hostname components.  -This function is defined as follows:: +    #!/usr/bin/python +    import unbound -	def reverse(domain): -		return '.'.join([a for a in domain.split(".")][::-1]) +    ctx = unbound.ub_ctx() +    ctx.resolvconf("/etc/resolv.conf") +    status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) +    if status == 0 and result.havedata: +        print "Result.data:", result.data.domain_list +    elif status != 0: +        print "Resolve error:", unbound.ub_strerror(status) + +In order to simplify the python code, unbound module contains the +:meth:`unbound.reverse` function which reverses the hostname components. +This function is defined as follows:: +    def reverse(domain): +        return '.'.join([a for a in domain.split(".")][::-1]) diff --git a/libunbound/python/doc/examples/example2.rst b/libunbound/python/doc/examples/example2.rst index c009ec1f5ae7..a2bf2cbf5199 100644 --- a/libunbound/python/doc/examples/example2.rst +++ b/libunbound/python/doc/examples/example2.rst @@ -1,41 +1,41 @@  .. _example_setup_ctx: -==============================  Lookup from threads -============================== +=================== -This example shows how to use unbound module from a threaded program.  -In this example, three lookup threads are created which work in background.  -Each thread resolves different DNS record.  +This example shows how to use unbound module from a threaded program. +In this example, three lookup threads are created which work in background. +Each thread resolves different DNS record. + +Source code +-----------  :: -	#!/usr/bin/python -	from unbound import ub_ctx, RR_TYPE_A, RR_CLASS_IN -	from threading import Thread -	 -	ctx = ub_ctx() -	ctx.resolvconf("/etc/resolv.conf") -	 -	class LookupThread(Thread): -		def __init__(self,ctx, name): -			Thread.__init__(self) -			self.ctx = ctx -			self.name = name - -		def run(self): -			print "Thread lookup started:",self.name -			status, result = self.ctx.resolve(self.name, RR_TYPE_A, RR_CLASS_IN) -			if status == 0 and result.havedata: -				print "  Result:",self.name,":", result.data.address_list -	 -	threads = [] -	for name in ["www.fit.vutbr.cz","www.vutbr.cz","www.google.com"]: -		thread = LookupThread(ctx, name) -		thread.start() -		threads.append(thread) -	     -	for thread in threads: -		thread.join() +    #!/usr/bin/python +    from unbound import ub_ctx, RR_TYPE_A, RR_CLASS_IN +    from threading import Thread + +    ctx = ub_ctx() +    ctx.resolvconf("/etc/resolv.conf") + +    class LookupThread(Thread): +        def __init__(self,ctx, name): +            Thread.__init__(self) +            self.ctx = ctx +            self.name = name + +        def run(self): +            print "Thread lookup started:",self.name +            status, result = self.ctx.resolve(self.name, RR_TYPE_A, RR_CLASS_IN) +            if status == 0 and result.havedata: +                print "  Result:",self.name,":", result.data.address_list +    threads = [] +    for name in ["www.fit.vutbr.cz","www.vutbr.cz","www.google.com"]: +        thread = LookupThread(ctx, name) +        thread.start() +        threads.append(thread) +    for thread in threads: +        thread.join() diff --git a/libunbound/python/doc/examples/example3.rst b/libunbound/python/doc/examples/example3.rst index 91360335c63a..b0626b55f9c1 100644 --- a/libunbound/python/doc/examples/example3.rst +++ b/libunbound/python/doc/examples/example3.rst @@ -1,12 +1,14 @@  .. _example_asynch: -==============================  Asynchronous lookup -============================== +===================  This example performs the name lookup in the background.   The main program keeps running while the name is resolved.  +Source code +----------- +  ::  	#!/usr/bin/python @@ -33,4 +35,5 @@ The main program keeps running while the name is resolved.  	if (status != 0):  		print "Resolve error:", unbound.ub_strerror(status) -The :meth:`unbound.ub_ctx.resolve_async` method is able to pass on any Python object. In this example, we used a dictionary object `my_data`. +The :meth:`unbound.ub_ctx.resolve_async` method is able to pass on any Python +object. In this example, we used a dictionary object ``my_data``. diff --git a/libunbound/python/doc/examples/example4.rst b/libunbound/python/doc/examples/example4.rst index 996ef4ede924..3b43eb85f939 100644 --- a/libunbound/python/doc/examples/example4.rst +++ b/libunbound/python/doc/examples/example4.rst @@ -1,33 +1,35 @@  .. _example_examine: -==============================  DNSSEC validator -============================== +================  This example program performs DNSSEC validation of a DNS lookup. +Source code +----------- +  :: -	#!/usr/bin/python -	import os -	from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN -	 -	ctx = ub_ctx() -	ctx.resolvconf("/etc/resolv.conf") -	if (os.path.isfile("keys")): -		ctx.add_ta_file("keys") #read public keys for DNSSEC verification -	 -	status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN) -	if status == 0 and result.havedata: -	 -	    print "Result:", result.data.address_list -	 -	    if result.secure: -	        print "Result is secure" -	    elif result.bogus: -	        print "Result is bogus" -	    else: -	        print "Result is insecure" +    #!/usr/bin/python +    import os +    from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN + +    ctx = ub_ctx() +    ctx.resolvconf("/etc/resolv.conf") +    if (os.path.isfile("keys")): +        ctx.add_ta_file("keys") #read public keys for DNSSEC verification + +    status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN) +    if status == 0 and result.havedata: + +        print "Result:", result.data.address_list + +        if result.secure: +            print "Result is secure" +        elif result.bogus: +            print "Result is bogus" +        else: +            print "Result is insecure"  More detailed informations can be seen in libUnbound DNSSEC tutorial `here`_. diff --git a/libunbound/python/doc/examples/example5.rst b/libunbound/python/doc/examples/example5.rst index 0a31d9a57e76..9262014bb7fd 100644 --- a/libunbound/python/doc/examples/example5.rst +++ b/libunbound/python/doc/examples/example5.rst @@ -1,13 +1,17 @@  .. _example_resolver_only: -==============================  Resolver only -============================== +=============  This example program shows how to perform DNS resolution only.  Unbound contains two basic modules: resolver and validator. -In case, the validator is not necessary, the validator module can be turned off using "module-config" option. -This option contains a list of module names separated by the space char. This list determined which modules should be employed and in what order. +In case, the validator is not necessary, the validator module can be turned off +using "module-config" option. +This option contains a list of module names separated by the space char. This +list determined which modules should be employed and in what order. + +Source code +-----------  :: @@ -25,5 +29,6 @@ This option contains a list of module names separated by the space char. This li  	    print "Result:", result.data.address_list  .. note:: -   The :meth:`unbound.ub_ctx.set_option` method must be used before the first resolution (i.e. before :meth:`unbound.ub_ctx.resolve` or :meth:`unbound.ub_ctx.resolve_async` call).  - +   The :meth:`unbound.ub_ctx.set_option` method must be used before the first +   resolution (i.e. before :meth:`unbound.ub_ctx.resolve` or +   :meth:`unbound.ub_ctx.resolve_async` call). diff --git a/libunbound/python/doc/examples/example6.rst b/libunbound/python/doc/examples/example6.rst index 478e13909277..6fde8b25fd8d 100644 --- a/libunbound/python/doc/examples/example6.rst +++ b/libunbound/python/doc/examples/example6.rst @@ -1,11 +1,13 @@  .. _example_localzone: -==============================  Local zone manipulation -============================== +======================= -This example program shows how to define local zone containing custom DNS records. +This example program shows how to define local zone containing custom DNS +records. -..	literalinclude:: example6-1.py -	:language: python +Source code +----------- +.. literalinclude:: example6-1.py +    :language: python diff --git a/libunbound/python/doc/examples/example7.rst b/libunbound/python/doc/examples/example7.rst index d4050215e435..2f48c8f0f26f 100644 --- a/libunbound/python/doc/examples/example7.rst +++ b/libunbound/python/doc/examples/example7.rst @@ -1,18 +1,33 @@  .. _example_idna: -=================================================  Internationalized domain name support -================================================= +=====================================  Unlike the libUnbound, pyUnbound is able to handle IDN queries. -..	literalinclude:: example7-1.py -	:language: python +Automatic IDN DNAME conversion +------------------------------- -If we use unicode string in :meth:`unbound.ub_ctx.resolve` method, the IDN DNAME conversion (if it is necessary) is performed on background. +If we use unicode string in :meth:`unbound.ub_ctx.resolve` method, +the IDN DNAME conversion (if it is necessary) is performed on background. -..	literalinclude:: example7-2.py -	:language: python +Source code +........... -The :class:`unbound.ub_data` class contains attributes suffix which converts the dname to UTF string. These attributes have the '_idn' suffix. -Apart from this aproach, two conversion functions exist (:func:`unbound.idn2dname` and :func:`unbound.dname2idn`). +.. literalinclude:: example7-1.py +    :language: python + +IDN converted attributes +------------------------ + +The :class:`unbound.ub_data` class contains attributes suffix which converts +the dname to UTF string. These attributes have the ``_idn`` suffix. + +Apart from this aproach, two conversion functions exist +(:func:`unbound.idn2dname` and :func:`unbound.dname2idn`). + +Source code +........... + +.. literalinclude:: example7-2.py +    :language: python diff --git a/libunbound/python/doc/examples/example8.rst b/libunbound/python/doc/examples/example8.rst index 8cdfcdc0a904..16c14047576b 100644 --- a/libunbound/python/doc/examples/example8.rst +++ b/libunbound/python/doc/examples/example8.rst @@ -1,28 +1,34 @@  .. _example_mxlookup: -=================================================  Lookup for MX and NS records -================================================= +============================ -The pyUnbound extension provides functions which are able to encode RAW RDATA produces by unbound resolver (see :class:`unbound.ub_data`). +The pyUnbound extension provides functions which are able to encode RAW RDATA +produces by unbound resolver (see :class:`unbound.ub_data`). -..	literalinclude:: example8-1.py -	:language: python +Source code +----------- -Previous example produces following output:: +.. literalinclude:: example8-1.py +    :language: python -	Result: -		raw data: 00 0F 05 6D 61 69 6C 34 03 6E 69 63 02 63 7A 00;00 14 02 6D 78 05 63 7A 6E 69 63 03 6F 72 67 00;00 0A 04 6D 61 69 6C 03 6E 69 63 02 63 7A 00 -		priority:15 address: mail4.nic.cz. -		priority:20 address: mx.cznic.org. -		priority:10 address: mail.nic.cz. +Output +------ -	Result: -		raw data: D9 1F CD 32 -		address: 217.31.205.50 +The previous example produces the following output:: -	Result: -		raw data: 01 61 02 6E 73 03 6E 69 63 02 63 7A 00;01 65 02 6E 73 03 6E 69 63 02 63 7A 00;01 63 02 6E 73 03 6E 69 63 02 63 7A 00 -		host: a.ns.nic.cz. -		host: e.ns.nic.cz. -		host: c.ns.nic.cz. +    Result: +        raw data: 00 0F 05 6D 61 69 6C 34 03 6E 69 63 02 63 7A 00;00 14 02 6D 78 05 63 7A 6E 69 63 03 6F 72 67 00;00 0A 04 6D 61 69 6C 03 6E 69 63 02 63 7A 00 +        priority:15 address: mail4.nic.cz. +        priority:20 address: mx.cznic.org. +        priority:10 address: mail.nic.cz. + +    Result: +        raw data: D9 1F CD 32 +        address: 217.31.205.50 + +    Result: +        raw data: 01 61 02 6E 73 03 6E 69 63 02 63 7A 00;01 65 02 6E 73 03 6E 69 63 02 63 7A 00;01 63 02 6E 73 03 6E 69 63 02 63 7A 00 +        host: a.ns.nic.cz. +        host: e.ns.nic.cz. +        host: c.ns.nic.cz. diff --git a/libunbound/python/doc/examples/index.rst b/libunbound/python/doc/examples/index.rst index c2c9cf457117..283261652dc0 100644 --- a/libunbound/python/doc/examples/index.rst +++ b/libunbound/python/doc/examples/index.rst @@ -1,14 +1,16 @@  Examples -============================== +======== -Here you can find several examples which utilizes the unbound library in Python environment.  -Unbound is a caching validator and resolver and can be linked into an application, as a library where can answer DNS queries for the application.  +Here you can find several examples which utilizes the unbound library in Python +environment. Unbound is a caching validator and resolver and can be linked into +an application, as a library where can answer DNS queries for the application.  This set of examples shows how to use the functions from Python environment. -`Tutorials` +Tutorials +---------  .. toctree:: -	:maxdepth: 1 -	:glob: +    :maxdepth: 1 +    :glob: -	example* +    example* | 
