[tor-commits] [ooni-probe/master] Support for performing NS lookup in ooni.templates.DNST

art at torproject.org art at torproject.org
Mon Mar 31 09:32:22 UTC 2014


commit 6dbaeec310142adbb09a8de405e4e2b8982f6155
Author: Arun Pandian G <arunpandianp at gmail.com>
Date:   Fri Mar 21 02:13:12 2014 +0530

    Support for performing NS lookup in ooni.templates.DNST
---
 ooni/templates/dnst.py |   61 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/ooni/templates/dnst.py b/ooni/templates/dnst.py
index 3a97ed8..ff5afc3 100644
--- a/ooni/templates/dnst.py
+++ b/ooni/templates/dnst.py
@@ -109,6 +109,67 @@ class DNSTest(NetTestCase):
         d.addErrback(gotError)
         return d
 
+    def performNSLookup(self, hostname, dns_server = None):
+        """
+        Performs a NS lookup and returns an array containg all nameservers in
+        the response.
+
+        :hostname: is the hostname to perform the NS lookup on
+
+        :dns_server: is the dns_server that should be used for the lookup as a
+                     tuple of ip port (ex. ("127.0.0.1", 53))
+        """
+        query = [dns.Query(hostname, dns.NS, dns.IN)]
+        if dns_server:
+            def gotResponse(message):
+                addrs = []
+                answers = []
+                for answer in message.answers:
+                    if answer.type is dns.NS:
+                        addr = answer.payload.name.name
+                        addrs.append(addr)
+                    answers.append(representAnswer(answer))
+
+                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
+                        answers=answers, addrs=addrs)
+                return addrs
+
+            def gotError(failure):
+                failure.trap(gaierror, TimeoutError)
+                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
+                        failure=failure)
+                return failure
+
+            resolver = Resolver(servers=[dns_server])
+            d = resolver.queryUDP(query, timeout=self.queryTimeout)
+            d.addCallback(gotResponse)
+            d.addErrback(gotError)
+        else:
+            def gotResponse(message):
+                addrs = []
+                answers = []
+                for answer in message[0]:
+                    if answer.type is dns.NS:
+                        addr = answer.payload.name.name
+                        addrs.append(addr)
+                    answers.append(representAnswer(answer))
+
+                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
+                        answers=answers, addrs=addrs)
+                return addrs
+
+            def gotError(failure):
+                failure.trap(gaierror, TimeoutError)
+                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
+                        failure=failure)
+                return failure
+
+            d = client.lookupNameservers(hostname)
+            d.addCallback(gotResponse)
+            d.addErrback(gotError)
+
+        return d
+
     def addToReport(self, query, resolver=None, query_type=None,
                     answers=None, name=None, addrs=None, failure=None):
         log.debug("Adding %s to report)" % query)





More information about the tor-commits mailing list