Rod Hynes 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
..
ed25519 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
protobuf 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
tapdance 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
LICENSE 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
README.md 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
build-apk.sh 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu
go.mod 1d167a5601 More explicitly replace gotapdance and obsf4 3 tahun lalu

README.md

refract

Refraction Networking Client

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

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:

  • Command Line Interface client

  • 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)
    // ...
    }
    
  • [CURRENTLY NOT MAINTAINED] Standalone TapDance mobile applications that use Golang Bindings as a shared library.

# 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"