https://github.com/refraction-networking/gotapdance
:twisted_rightwards_arrows: Cross-platform Golang implementation of TapDance censorship circumvention system client
https://github.com/refraction-networking/gotapdance
Last synced: over 1 year ago
JSON representation
:twisted_rightwards_arrows: Cross-platform Golang implementation of TapDance censorship circumvention system client
- Host: GitHub
- URL: https://github.com/refraction-networking/gotapdance
- Owner: refraction-networking
- License: apache-2.0
- Created: 2019-08-21T18:44:55.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2025-01-02T02:47:46.000Z (over 1 year ago)
- Last Synced: 2025-04-01T10:11:07.468Z (over 1 year ago)
- Language: Go
- Homepage: https://refraction.network
- Size: 16.1 MB
- Stars: 56
- Watchers: 8
- Forks: 17
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
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
0. Install [Golang](https://golang.org/dl/) (currently tested against version 1.10 and latest).
1. Get source code for Go TapDance and all dependencies:
```bash
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](cli)
* [Psiphon](https://psiphon.ca/) Android app integrated TapDance as one of their transports.
* Use tapdance directly from other Golang program:
```Golang
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](gobind) as a shared library.
* [Android application in Java](android)
# Links
[Refraction Networking](https://refraction.network) is an umbrella term for the family of similarly working technnologies.
TapDance station code released for FOCI'17 on github: [refraction-networking/tapdance](https://github.com/refraction-networking/tapdance)
Original 2014 paper: ["TapDance: End-to-Middle Anticensorship without Flow Blocking"](https://ericw.us/trow/tapdance-sec14.pdf)
Newer(2017) paper that shows TapDance working at high-scale: ["An ISP-Scale Deployment of TapDance"](https://www.usenix.org/system/files/conference/foci17/foci17-paper-frolov_0.pdf)
