Skip to content
🔀 Cross-platform Golang implementation of TapDance censorship circumvention system client
Go Java Shell Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
android
assets protobuf: +stats, +covert init (#87) Oct 17, 2018
build
cli go fmt Sep 9, 2019
gobind
protobuf Finalize move to the new repo (#10) Sep 6, 2019
tapdance Travis build master (#21) Sep 30, 2019
tdproxy
test_scripts
tools Finalize move to the new repo (#10) Sep 6, 2019
.travis.yml
LICENSE
README.md Acttually complete the move to the new repo Sep 6, 2019

README.md

refract

TapDance Client

TapDance is a free-to-use anti-censorship technology, protected from enumeration attacks.

Build

Download Golang and TapDance and dependencies

  1. Install Golang (currently tested against version 1.10 and latest).

  2. Get source code for Go TapDance and all dependencies:

go get -d -u -t github.com/refraction-networking/gotapdance/...

Ignore the "no buildable Go source files" warning.

If you have outdated versions of libraries used, you might want to do go get -u all.

Usage

There are 3 supported ways to use TapDance:

package main

import (
	"github.com/refraction-networking/gotapdance/tapdance"
	"fmt"
)

func main() {
    // first, copy ClientConf and roots files into assets directory
    // make sure assets directory is writable (only) by the td process
    tapdance.AssetsSetDir("./path/to/assets/dir/")

    tdConn, err := tapdance.Dial("tcp", "censoredsite.com:80")
    if err != nil {
        fmt.Printf("tapdance.Dial() failed: %+v\n", err)
        return
    }
    // tdConn implements standard net.Conn, allowing to use it like any other Golang conn with
    // Write(), Read(), Close() etc. It also allows to pass tdConn to functions that expect
    // net.Conn, such as tls.Client() making it easy to do tls handshake over TapDance conn.
    _, err = tdConn.Write([]byte("GET / HTTP/1.1\nHost: censoredsite.com\n\n"))
    if err != nil {
        fmt.Printf("tdConn.Write() failed: %+v\n", err)
        return
    }
    buf := make([]byte, 16384)
    _, err = tdConn.Read(buf)
    // ...
}

Links

Refraction Networking is an umberlla term for the family of similarly working technnologies.

TapDance station code released for FOCI'17 on github: refraction-networking/tapdance

Original 2014 paper: "TapDance: End-to-Middle Anticensorship without Flow Blocking"

Newer(2017) paper that shows TapDance working at high-scale: "An ISP-Scale Deployment of TapDance"

You can’t perform that action at this time.