[tor-commits] [ooni-probe/develop] Bump up the version of the HTTP Host test.

isis at torproject.org isis at torproject.org
Thu Jun 6 16:41:36 UTC 2013


commit f85dbd4a4433a478e12ce3921ce072a2b7019eb9
Author: Arturo Filastò <art at fuffa.org>
Date:   Tue Feb 26 16:29:05 2013 +0100

    Bump up the version of the HTTP Host test.
    
    * Always perform a connection directly to the oonib test helper
    * Always include the 'censored' key (default to False)
---
 nettests/experimental/http_filtering_bypassing.py |    2 +-
 nettests/manipulation/http_host.py                |   39 ++++++++++++---------
 2 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/nettests/experimental/http_filtering_bypassing.py b/nettests/experimental/http_filtering_bypassing.py
index a82994a..dc103db 100644
--- a/nettests/experimental/http_filtering_bypassing.py
+++ b/nettests/experimental/http_filtering_bypassing.py
@@ -66,7 +66,7 @@ class HTTPFilteringBypass(tcpt.TCPTest):
         return d
 
     def test_fuzzy_match_blocking(self):
-        hostname_field = randomStr(10) + self.input ++ randomStr(10)
+        hostname_field = randomStr(10) + self.input + randomStr(10)
         payload = "GET / HTTP/1.1\n\r"
         payload += "Host: %s\n\r" % hostname_field
 
diff --git a/nettests/manipulation/http_host.py b/nettests/manipulation/http_host.py
index 1665992..38b0fff 100644
--- a/nettests/manipulation/http_host.py
+++ b/nettests/manipulation/http_host.py
@@ -15,10 +15,12 @@ from ooni.utils import log
 from ooni.templates import httpt
 
 class UsageOptions(usage.Options):
-    optParameters = [['backend', 'b', 'http://127.0.0.1:57001', 
-                        'URL of the test backend to use'],
-                     ['content', 'c', None, 
-                        'The file to read from containing the content of a block page']]
+    optParameters = [['backend', 'b', 'http://127.0.0.1:57001',
+                      'URL of the test backend to use. Should be \
+                              listening on port 80 and be a \
+                              HTTPReturnJSONHeadersHelper'],
+                     ['content', 'c', None, 'The file to read \
+                            from containing the content of a block page']]
 
 class HTTPHost(httpt.HTTPTest):
     """
@@ -33,7 +35,7 @@ class HTTPHost(httpt.HTTPTest):
     """
     name = "HTTP Host"
     author = "Arturo Filastò"
-    version = "0.2.1"
+    version = "0.2.3"
 
     randomizeUA = False
     usageOptions = UsageOptions
@@ -46,25 +48,25 @@ class HTTPHost(httpt.HTTPTest):
     def test_filtering_prepend_newline_to_method(self):
         headers = {}
         headers["Host"] = [self.input]
-        return self.doRequest('http://'+self.input, method="\nGET",
+        return self.doRequest(self.localOptions['backend'], method="\nGET",
                 headers=headers)
 
     def test_filtering_add_tab_to_host(self):
         headers = {}
         headers["Host"] = [self.input + '\t']
-        return self.doRequest('http://'+self.input,
+        return self.doRequest(self.localOptions['backend'],
                 headers=headers)
 
     def test_filtering_of_subdomain(self):
         headers = {}
         headers["Host"] = [randomStr(10) + '.' + self.input]
-        return self.doRequest('http://'+self.input,
+        return self.doRequest(self.localOptions['backend'],
                 headers=headers)
 
     def test_filtering_via_fuzzy_matching(self):
         headers = {}
         headers["Host"] = [randomStr(10) + self.input + randomStr(10)]
-        return self.doRequest('http://'+self.input,
+        return self.doRequest(self.localOptions['backend'],
                 headers=headers)
 
     def test_send_host_header(self):
@@ -89,7 +91,6 @@ class HTTPHost(httpt.HTTPTest):
         """
         if self.localOptions['content']:
             self.report['censored'] = True
-
             censorship_page = open(self.localOptions['content'])
             response_page = iter(body.split("\n"))
 
@@ -100,6 +101,8 @@ class HTTPHost(httpt.HTTPTest):
                     break
 
             censorship_page.close()
+        else:
+            self.report['censored'] = None
 
     def processResponseBody(self, body):
         """
@@ -110,13 +113,14 @@ class HTTPHost(httpt.HTTPTest):
         # If we don't see a json array we know that something is wrong for
         # sure
         if not body.startswith("{"):
+            log.msg("This does not appear to be JSON")
             self.report['transparent_http_proxy'] = True
             self.check_for_censorship(body)
             return
         try:
             content = json.loads(body)
         except:
-            log.debug("The json does not parse, this is not what we expected")
+            log.msg("The json does not parse, this is not what we expected")
             self.report['trans_http_proxy'] = True
             self.check_for_censorship(body)
             return
@@ -124,13 +128,14 @@ class HTTPHost(httpt.HTTPTest):
         # We base the determination of the presence of a transparent HTTP
         # proxy on the basis of the response containing the json that is to be
         # returned by a HTTP Request Test Helper
-        if 'request_method' in content and \
-                'request_uri' in content and \
-                'request_headers' in content:
-            log.debug("Found the keys I expected in %s" % content)
+        if 'request_headers' in content and \
+                'request_line' in content and \
+                'headers_dict' in content:
+            log.msg("Found the keys I expected in %s" % content)
             self.report['trans_http_proxy'] = False
+            self.report['censored'] = False
         else:
-            log.debug("Did not find the keys I expected in %s" % content)
+            log.msg("Did not find the keys I expected in %s" % content)
             self.report['trans_http_proxy'] = True
+            self.check_for_censorship(body)
 
-        self.check_for_censorship(body)





More information about the tor-commits mailing list