Skip to content

🔀 Cross-platform Golang implementation of TapDance censorship circumvention system client.

License

Notifications You must be signed in to change notification settings

dellard/gotapdance

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 1.8-1.9 versions), set GOPATH:
GOPATH="${HOME}/go/"
  1. Get source code for Go Tapdance and all dependencies:
go get github.com/sergeyfrolov/gotapdance github.com/Sirupsen/logrus \
          github.com/agl/ed25519/extra25519 golang.org/x/crypto/curve25519 \
          github.com/refraction-networking/utls github.com/sergeyfrolov/bsbuffer \
          github.com/golang/protobuf/proto

Ignore the "no buildable Go source files" warning.

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

Usage

There are several ways to use TapDance:

package main

import (
	"github.com/sergeyfrolov/gotapdance/tapdance"
	"fmt"
)

func main() {
	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"

About

🔀 Cross-platform Golang implementation of TapDance censorship circumvention system client.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 90.5%
  • Java 5.5%
  • Python 2.5%
  • Shell 1.5%