Conjure
A modular system for connecting to proxies. Designed to be probe-resistant, enumeration resistant, and easy to integrate at multiple layers in networking pipelines.
Refraction Networking
Refraction Networking is a free-to-use anti-censorship technology, that places proxies at Internet Service Providers, so they are harder to block. This client includes support for both the TapDance and Conjure protocols
Build
Install Golang and download conjure and any dependencies
Install Golang (currently suggested to use go version
1.13.7+
).Get source code for Go TapDance and all dependencies:
go get -d -u -t github.com/refraction-networking/gotapdance/...
Ignore the “no build-able 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:
Psiphon Android app integrated TapDance as one of their transports.
Use tapdance directly from other Golang program:
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)
// ...
}
Publications
(2014) “TapDance: End-to-Middle Anticensorship without FlowBlocking”
(2019) “Conjure: Summoning Proxies from Unused Address Space”
Links
Refraction Networking is an umbrella term for the family of similar technologies.
TapDance station code released for FOCI'17 on github: refraction-networking/tapdance