Programs for censorship circumvention over online scanning service (OSS). Send questions to David Fifield . oss: A CGI program implementing a reference scanning service. The service does nothing but request pages and follow up to 99 redirects. refresh: A CGI program that serves refreshes and counts how many times it has been refreshed. transport: A proxy that carries data over OSSes. It uses SOCKS and works as an external Tor pluggable transports proxy. redirects-client is the client proxy and redirects-server is the server proxy. redirects-counter and redirects-payload are OSS limit testers. osslib.py contains details of initiating scans using a variety of OSSes. transport/experiments, transport/redirects-counter-results, transport/redirects-payload-results: Experimental results of running the test programs. == How to use as a client The code works as an external managed transport. It also needs to know your external IP address. You also need to open and forward a port (by default 7000). Start redirects-client with cd transport MYIP=$(./myip.py -4) ./redirects-client -d --oss ref/302 --http :7000 --return $MYIP:7000 The --oss option controls what service you want to bounce off of. There is a list of supported servers in the --help output. ref is operated by David Fifield for testing and won't cut you for overuse. Once redirects-client is running, start tor with the included torrc. tor -f torrc When it starts working you will see tons of output like this from redirects-client: 1367978417.6: SOCKS connection from 127.0.0.1:59723. 1367978417.6: Got SOCKS request for 173.255.221.44:8000. 1367978417.6: New stream 127.0.0.1:5000:8a649412. 1367978417.6: readable client 1367978417.6: read 230 bytes from 127.0.0.1:5000:8a649412 1367978417.6: ref: initiate 1367978417.6: GET http://redirects.bamsoftware.com/scan?url=http%3A%2F%2F173.255.221.44%3A8000%2Fe5c4131d%2F8a649412%2F0%2F0%2F302%2F8192%3Freturn%3Dhttp%253A%252F%252FX.X.X.X%253A7000 1367978417.87: readable http 1367978417.87: Request from 69.164.193.231:51582: 1367978417.87: GET /11d8ecf8/8a649412/0/0/302/8192 HTTP/1.1 1367978417.87: Host: X.X.X.X:7000 User-Agent: Go http package Referer: http Accept-Encoding: gzip 1367978417.87: got GET request with stream_id '8a649412' seq 0 ack 0 1367978417.87: expecting seq 0 == 0, ack 0 == 0 == 0 + 0 1367978417.87: got payload of 0 bytes 1367978417.87: send_redirect case 3 1367978417.87: stream 127.0.0.1:5000:8a649412 redirecting to http://173.255.221.44:8000/e4ffad52/8a649412/0/0/302/8192?data=FgMBAOEBAADdAwFRibGx3qh8cTb0Egd9_El1YNzdh8lwVljFKdZya2yEJwAASMAKwBQAiACHADkAOMAPwAUAhAA1wAfACcARwBMARQBEADMAMsAMwA7AAsAEAJYAQQAEAAUAL8AIwBIAFgATwA3AA_7_AAoA_wEAAGwAAAAfAB0AABp3d3cuaWozdHF1dXd3NmgydXF1enV6LmNvbQALAAQDAAECAAoANAAyAA4ADQAZAAsADAAYAAkACgAWABcACAAGAAcAFAAVAAQABQASABMAAQACAAMADwAQABEAIwAAAA8AAQE%3D 69.164.193.231 - - [07/May/2013 19:00:17] "GET /11d8ecf8/8a649412/0/0/302/8192 HTTP/1.1" 302 - 1367978418.08: readable http 1367978418.08: Request from 69.164.193.231:51584: 1367978418.08: GET /eab48c04/8a649412/0/230/302/8192 HTTP/1.1