def test_random_invalid_method(self): """ We test sending data to a TCP echo server listening on port 80, if what we get back is not what we have sent then there is tampering going on. This is for example what squid will return when performing such request: HTTP/1.0 400 Bad Request Server: squid/2.6.STABLE21 Date: Sat, 23 Jul 2011 02:22:44 GMT Content-Type: text/html Content-Length: 1178 Expires: Sat, 23 Jul 2011 02:22:44 GMT X-Squid-Error: ERR_INVALID_REQ 0 X-Cache: MISS from cache_server X-Cache-Lookup: NONE from cache_server:3128 Via: 1.0 cache_server:3128 (squid/2.6.STABLE21) Proxy-Connection: close """ payload = randomSTR(4) + " / HTTP/1.1\n\r" d = self.sendPayload(payload) d.addCallback(self.check_for_manipulation, payload) return d
def test_search_bad_request(self): """ Attempts to perform a request with a random invalid HTTP method. If we are being MITMed by a Transparent Squid HTTP proxy we will get back a response containing the X-Squid-Error header. """ def process_headers(headers): log.debug("Processing headers in test_search_bad_request") if 'X-Squid-Error' in headers: log.msg("Detected the presence of a transparent HTTP "\ "squid proxy") self.report['trans_http_proxy'] = True else: log.msg("Did not detect the presence of transparent HTTP "\ "squid proxy") self.report['transparent_http_proxy'] = False log.msg("Testing Squid proxy presence by sending a random bad request") headers = {} #headers["Host"] = [self.input] method = utils.randomSTR(10, True) self.report['transparent_http_proxy'] = None return self.doRequest(self.localOptions['backend'], method=method, headers=headers, headers_processor=process_headers)
def get_measurement_header(): return { 'probe_asn': 'AS'+str(random.randint(0, 2**16)), 'probe_cc': randomSTR(2, num=False), 'probe_ip': '127.0.0.1', 'probe_city': None, 'software_name': 'ooniprobe', 'software_version': '0.0.0', 'options': {}, 'annotations': {}, 'data_format_version': '0.2.0', 'test_name': 'dummy', 'test_version': '0.0.0', 'test_helpers': {}, 'test_start_time': '2016-01-01 01:01:01', 'test_runtime': 0.1, 'input_hashes': [], 'report_id': randomSTR(100), 'test_keys': {}, 'input': '' }
def get_measurement_header(): return { 'probe_asn': 'AS' + str(random.randint(0, 2**16)), 'probe_cc': randomSTR(2, num=False), 'probe_ip': '127.0.0.1', 'probe_city': None, 'software_name': 'ooniprobe', 'software_version': '0.0.0', 'options': {}, 'annotations': {}, 'data_format_version': '0.2.0', 'test_name': 'dummy', 'test_version': '0.0.0', 'test_helpers': {}, 'test_start_time': '2016-01-01 01:01:01', 'test_runtime': 0.1, 'input_hashes': [], 'report_id': randomSTR(100), 'test_keys': {}, 'input': '' }
def write_dummy_measurements(fh, size=100): """ :param fh: an open file handle :param size: size of the measurements in bytes to write :return: The actual size that has been written. """ written_size = 0 while written_size < size: entry = get_measurement_header() entry['test_keys']['data'] = randomSTR(int(size / 10)) data = json.dumps(entry) written_size += len(data) fh.write(data) return written_size
def random_measurement_name(start_date=None, end_date=None): # By default we use as start date something in the past 6 days and end # date today. if start_date is None: start_date = datetime.now() - timedelta(days=6) if end_date is None: end_date = datetime.now() test_details = dict( test_name=random.choice([ 'http_invalid_request_line', 'web_connectivity', 'http_header_field_manipulation', 'vanilla_tor', 'new_test_name' ]), probe_cc=randomSTR(2, num=False), # XXX this should be a valid CC probe_asn='AS' + str(random.randint(0, 2**16)), test_start_time=randomDate(start_date, end_date).strftime(LONG_DATE)) return generate_filename(test_details)
def random_measurement_name(start_date=None, end_date=None): # By default we use as start date something in the past 6 days and end # date today. if start_date is None: start_date = datetime.now() - timedelta(days=6) if end_date is None: end_date = datetime.now() test_details = dict( test_name=random.choice(['http_invalid_request_line', 'web_connectivity', 'http_header_field_manipulation', 'vanilla_tor', 'new_test_name']), probe_cc=randomSTR(2, num=False), # XXX this should be a valid CC probe_asn='AS'+str(random.randint(0, 2**16)), test_start_time=randomDate(start_date, end_date).strftime(LONG_DATE) ) return generate_filename(test_details)