[tor-commits] [ooni-probe/master] Implementation of the v0.3 spec
art at torproject.org
art at torproject.org
Tue May 27 22:11:01 UTC 2014
commit c81de40d7d2f8ebf82e63607af5b50112a40a368
Author: kudrom <kudrom at riseup.net>
Date: Sat May 17 20:13:00 2014 +0200
Implementation of the v0.3 spec
---
ooni/nettests/manipulation/captiveportal.py | 42 +++++++++++++++++++--------
1 file changed, 30 insertions(+), 12 deletions(-)
diff --git a/ooni/nettests/manipulation/captiveportal.py b/ooni/nettests/manipulation/captiveportal.py
index 35bfa75..eb28104 100644
--- a/ooni/nettests/manipulation/captiveportal.py
+++ b/ooni/nettests/manipulation/captiveportal.py
@@ -64,7 +64,7 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
name = "captiveportal"
description = "Captive Portal Test"
- version = '0.2'
+ version = '0.3'
author = "Isis Lovecruft"
usageOptions = UsageOptions
requiresRoot = False
@@ -265,11 +265,11 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
hostname = self.hostname_to_0x20(hostname)
for auth_ns in resolved_auth_ns:
+ querynames.append(hostname)
try:
answer = yield self.performSOALookup(hostname, (auth_ns, 53))
except Exception:
continue
- querynames.append(hostname)
for soa in answer:
answernames.append(soa[0])
serials.append(str(soa[1]))
@@ -291,17 +291,22 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
log.msg("Some SOA serial numbers did not match the rest!")
serial_match = False
- ret = name_match, serial_match, querynames, answernames, serials
-
if name_match and serial_match:
log.msg("Your DNS queries do not appear to be tampered.")
- defer.returnValue(ret)
elif name_match or serial_match:
log.msg("Something is tampering with your DNS queries.")
- defer.returnValue(ret)
elif not name_match and not serial_match:
log.msg("Your DNS queries are definitely being tampered with.")
- defer.returnValue(ret)
+
+ ret = {
+ 'result': name_match and serial_match,
+ 'name_match': name_match,
+ 'serial_match': serial_match,
+ 'querynames': querynames,
+ 'answernames': answernames,
+ 'SOA_serials': serials
+ }
+ defer.returnValue(ret)
def get_random_url_safe_string(self, length):
"""
@@ -422,16 +427,20 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
log.msg("Running the Google Chrome DNS-based captive portal test...")
gmatch, google_dns_result = yield self.compare_random_hostnames(3, 10)
+ ret = {
+ 'result': gmatch,
+ 'addresses': google_dns_result
+ }
if gmatch:
log.msg("Google Chrome DNS-based captive portal test did not")
log.msg("detect a captive portal.")
- defer.returnValue(google_dns_result)
+ defer.returnValue(ret)
else:
log.msg("Google Chrome DNS-based captive portal test believes")
log.msg("you are in a captive portal, or else something very")
log.msg("odd is happening with your DNS.")
- defer.returnValue(google_dns_result)
+ defer.returnValue(ret)
@defer.inlineCallbacks
def ms_dns_cp_test(self):
@@ -447,6 +456,10 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
msmatch, ms_dns_result = yield self.dns_resolve_match("dns.msftncsi.com",
"131.107.255.255")
+ ret = {
+ 'result': msmatch,
+ 'address': ms_dns_result
+ }
if msmatch:
log.msg("Microsoft NCSI DNS-based captive portal test did not")
log.msg("detect a captive portal.")
@@ -517,10 +530,9 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
log.msg("is filtered.")
defer.returnValue(False)
- result = []
+ result = {}
for vt in vendor_tests:
report = {}
- report['vt'] = vt
experiment_url = vt[0]
control_result = vt[1]
@@ -541,7 +553,13 @@ class CaptivePortal(httpt.HTTPTest, dnst.DNSTest):
else:
log.err("Ooni is trying to run an undefined CP vendor test.")
- result.append(report)
+
+ report['URL'] = experiment_url
+ report['http_status_summary'] = control_result
+ report['http_status_number'] = control_code
+ report['User_Agent'] = vt[3]
+ result[test_name] = report
+
defer.returnValue(result)
@defer.inlineCallbacks
More information about the tor-commits
mailing list