TapDance is a free-to-use anti-censorship technology, protected from enumeration attacks.
-
Install Golang (currently tested against version 1.10 and latest).
-
Get source code for Go TapDance and all dependencies:
go get -d -u -t github.com/sergeyfrolov/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
.
There are 3 supported ways to use TapDance:
-
Psiphon Android app integrated TapDance as one of their transports.
-
Use tapdance directly from other Golang program:
package main
import (
"github.com/sergeyfrolov/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)
// ...
}
-
[CURRENTLY NOT MAINTAINED] Standalone TapDance mobile applications that use Golang Bindings as a shared library.
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"