Details ======= *Test Name*: HTTP Host *Current version*: 0.2 *NetTest*: HTTP Host (https://gitweb.torproject.org/ooni-probe.git/blob/HEAD:/ooni/nettests/core/http_host.py) *Test Helper*: HTTP Return JSON Headers (https://gitweb.torproject.org/oonib.git/blob/HEAD:/oonib/testhelpers/http_helpers.py) *Test Type*: Traffic Manipulation, Content Blocking *Requires Root*: No Description =========== This test is aimed at detecting the presence of a transparent HTTP proxy and enumerating the sites that are being censored by it. It places inside of the Host header field the hostname of the site that is to be tested for censorship and then determines if the probe is behind a transparent HTTP proxy (because the response from the backend server does not match) and if the site is censored, by checking if the page that it got back matches the input block page. *Why do content blocking?* Q: Why should be do content blocking measurements with this test when we have other tests that also do this? A: Why not? Although you are correct that technically the two tests are equivalent even though the IP layer differs in the two tests. Note: We may in the future remove the Content Blocking aspect of the HTTP Host test. How to run the test =================== `ooniprobe nettest/core/http_host.py -f -b -c ` *input_file* is a file containing the hostnames to check for censorship one per line. *backend url* is the url of the backend that will be used for checking if the site is blocked or not. *content* is the content of a page. When a transparent HTTP proxy is present we will do comparisons against this to verify if the requested site is blocked or not. Sample report ============= From running: `ooniprobe nettests/core/http_host.py` :: ########################################### # OONI Probe Report for HTTP Host test # Tue Nov 20 17:42:50 2012 ########################################### --- {probe_asn: null, probe_cc: null, probe_ip: 127.0.0.1, software_name: ooniprobe, software_version: 0.0.7.1-alpha, start_time: 1353426170.0, test_name: HTTP Host, test_version: '0.2'} ... --- input: torproject.org report: requests: - request: body: null headers: Host: [torproject.org] User-Agent: - ['Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1', 'Netscape 8.1, Windows XP'] method: GET url: http://127.0.0.1:57001 response: body: '{"request_method": "GET", "request_uri": "/", "request_body": "", "request_headers": {"Connection": "close", "Host": "torproject.org", "User-Agent": "(''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1'', ''Netscape 8.1, Windows XP'')"}}' code: 200 headers: - - Content-Length - ['270'] - - Etag - ['"83dd0f393b39d0a316b2fc61fd61dafa92c336b5"'] - - Content-Type - [text/html; charset=UTF-8] - - Server - [cyclone/1.0-rc13] trans_http_proxy: false test_name: test_send_host_header test_started: 1353429770.287463 ...