Full-featured BitTorrent client package and utilities
Go to file
Matt Joiner 984a69c73a Merge pull request #144 from BonkaBonka/fastfail
Abort verify at first hash mismatch.
2017-01-04 14:42:59 +11:00
bencode Make bencode.Bytes work with pointer and nonpointer receivers 2016-08-26 20:29:29 +10:00
cmd Abort verify at first hash mismatch. 2017-01-03 21:44:19 -05:00
fs gofmt simplify 2016-11-22 14:01:09 +11:00
internal Remove the InfoEx type, and don't generate its infohash on the fly 2016-08-26 20:29:05 +10:00
iplist iplist: Begin adding support for parsing CIDR lists 2016-12-01 15:41:52 +11:00
logonce
metainfo Panic if NewHashFromHex gets a bad string 2017-01-01 10:08:45 +11:00
mmap_span
mse Speed up mse.handshake.establishS 2016-09-30 12:14:34 +10:00
peer_protocol peer_protocol.Decoder.Decode: Avoid allocating another intermediate reader 2016-09-25 10:31:43 +10:00
storage storage: ClientImpl interface now includes Close 2016-10-25 20:00:09 +11:00
testdata
tracker tracker: Support the original http response peers format 2016-11-22 15:40:46 +11:00
util gofmt simplify 2016-11-22 14:01:09 +11:00
LICENSE
README.md Update README.md 2016-12-31 19:17:00 +11:00
TODO Remove completed TODO item 2016-11-25 17:24:16 +11:00
client.go Remove unused funcs and idents 2017-01-01 11:03:02 +11:00
client_test.go dht/… moved to github.com/anacrolix/dht 2016-12-14 11:43:37 +11:00
config.go dht/… moved to github.com/anacrolix/dht 2016-12-14 11:43:37 +11:00
conn_stats.go Add connection read stats 2016-07-12 16:42:04 +10:00
connection.go Remove unused funcs and idents 2017-01-01 11:03:02 +11:00
connection_test.go Don't accept pieces with bad indexes 2016-11-22 14:20:48 +11:00
doc.go List implemented BEPs 2016-07-11 13:53:00 +10:00
example_test.go
file.go
file_test.go
global.go Prepare to allow max conns per torrent to be configured 2016-07-05 16:23:17 +10:00
issue97_test.go Fixes for changes to metainfo.MetaInfo.UnmarshalInfo 2016-09-20 18:39:07 +10:00
main_test.go Skeleton TestMain 2016-07-10 22:58:43 +10:00
misc.go Kick only the worst connection when a piece fails a check 2016-11-23 12:59:23 +11:00
misc_test.go
pex.go
pex_test.go
piece.go Comment on PiecePriorityNext 2016-08-30 16:55:50 +10:00
piecestate.go
ratelimitreader.go Fix not working import 2016-10-15 11:56:15 +11:00
reader.go Reader.Close: Don’t set t to nil, we may still expect it 2016-12-05 22:00:26 +11:00
reader_test.go
spec.go Add error return value to metainfo.MetaInfo.UnmarshalInfo 2016-09-20 12:32:15 +10:00
t.go Reader.Close: Prefer to lock Client in public method 2016-10-31 19:05:33 +11:00
torrent.go Remove unused funcs and idents 2017-01-01 11:03:02 +11:00
torrent_stats.go Add counters for uploads 2016-07-05 15:52:33 +10:00
torrent_test.go Fix race condition in TestPieceHashFailed 2016-12-13 14:44:00 +11:00
tracker_scraper.go Improve readability of tracker status line 2016-07-14 13:08:52 +10:00
worst_conns.go Ditch the use of generic slices.HeapInterface for finding the worst "bad" connection 2016-10-31 16:24:48 +11:00

README.md

torrent

Join the chat at https://gitter.im/anacrolix/torrent GoDoc

This repository implements BitTorrent-related packages and command-line utilities in Go. The emphasis is on use as a library from other projects. It's been used 24/7 in production by a downstream, private service since late 2014.

There is support for protocol encryption, DHT, PEX, uTP, and various extensions. See the package documentation for a more complete list. There are several data storage backends provided: blob, file, and mmap, and you can write your own, such as to store data on S3, or in a database. You can use the provided binaries in ./cmd, or use torrent as a library for your own applications.

Many of the sub-packages can be used for other purposes: dht, bencode, and tracker, in particular.

Installation

Install the library package with go get github.com/anacrolix/torrent, or the provided cmds with go get github.com/anacrolix/torrent/cmd/....

Library example

There is a small example in the package documentation.

Other public projects using torrent

Mobile

There's a branch called mobile that supports binding to torrent with the gomobile tool. It has some API changes as required by gomobile. Checkout the mobile branch, and bind as usual.

Commands

Here I'll describe what some of the provided commands in ./cmd do.

Note that the godo command which is invoked in the following examples builds and executes a Go import path, like go run. It's easier to use this convention than to spell out the install/invoke cycle for every single example.

torrent

Downloads torrents from the command-line. This first example does not use godo.

$ go get github.com/anacrolix/torrent/cmd/torrent
# Now 'torrent' should be in $GOPATH/bin, which should be in $PATH.
$ torrent 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
ubuntu-14.04.2-desktop-amd64.iso [===================================================================>]  99% downloading (1.0 GB/1.0 GB)
2015/04/01 02:08:20 main.go:137: downloaded ALL the torrents
$ md5sum ubuntu-14.04.2-desktop-amd64.iso
1b305d585b1918f297164add46784116  ubuntu-14.04.2-desktop-amd64.iso
$ echo such amaze
wow

torrentfs

torrentfs mounts a FUSE filesystem at -mountDir. The contents are the torrents described by the torrent files and magnet links at -torrentPath. Data for read requests is fetched only as required from the torrent network, and stored at -downloadDir.

$ mkdir mnt torrents
$ godo github.com/anacrolix/torrent/cmd/torrentfs -mountDir mnt -torrentPath torrents &
$ cd torrents
$ wget http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso.torrent
$ cd ..
$ ls mnt
ubuntu-14.04.2-desktop-amd64.iso
$ pv mnt/ubuntu-14.04.2-desktop-amd64.iso | md5sum
996MB 0:04:40 [3.55MB/s] [========================================>] 100%
1b305d585b1918f297164add46784116  -

torrent-magnet

Creates a magnet link from a torrent file. Note the extracted trackers, display name, and info hash.

$ godo github.com/anacrolix/torrent/cmd/torrent-magnet < ubuntu-14.04.2-desktop-amd64.iso.torrent
magnet:?xt=urn:btih:546cf15f724d19c4319cc17b179d7e035f89c1f4&dn=ubuntu-14.04.2-desktop-amd64.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&tr=http%3A%2F%2Fipv6.torrent.ubuntu.com%3A6969%2Fannounce

dht-ping

Pings DHT nodes with the given network addresses.

$ godo ./cmd/dht-ping router.bittorrent.com:6881 router.utorrent.com:6881
2015/04/01 17:21:23 main.go:33: dht server on [::]:60058
32f54e697351ff4aec29cdbaabf2fbe3467cc267 (router.bittorrent.com:6881): 648.218621ms
ebff36697351ff4aec29cdbaabf2fbe3467cc267 (router.utorrent.com:6881): 873.864706ms
2/2 responses (100.000000%)