Full-featured BitTorrent client package and utilities
Go to file
Matt Joiner 011838998e Add test for issue #111 and #112 2016-09-12 16:53:20 +10:00
bencode Make bencode.Bytes work with pointer and nonpointer receivers 2016-08-26 20:29:29 +10:00
cmd Pass seed option to Config for cmd/torrent 2016-08-31 17:20:20 +08:00
dht dht: Add counters for writes and write errors 2016-07-23 22:39:06 +10:00
fs Remove the InfoEx type, and don't generate its infohash on the fly 2016-08-26 20:29:05 +10: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/cmd/pack-blocklist use tagflag 2016-05-16 18:45:23 +10:00
logonce logonce is a package that prints each distinct message only once 2014-11-16 13:04:44 -06:00
metainfo Comment typo (#110) 2016-09-07 09:43:29 +10:00
mmap_span refactor struct identifiers to follow conventional go names 2016-04-18 23:11:11 -05:00
mse refactor struct identifiers to follow conventional go names 2016-04-18 23:11:11 -05:00
peer_protocol Add peer_protocol.Integer.Int() 2016-02-21 17:25:26 +11:00
storage Rework storage interfaces to make them simpler to implement 2016-09-02 15:10:57 +10:00
testdata Add benchmark for adding a torrent with a lot of pieces 2015-06-22 19:43:22 +10:00
tracker tracker: Skip any net errors to third party trackers 2016-05-23 09:29:14 +10:00
util Remove the InfoEx type, and don't generate its infohash on the fly 2016-08-26 20:29:05 +10:00
LICENSE The license is MPL2.0 2015-03-25 17:35:33 +11:00
README.md Remove broken coverage link from README 2016-07-11 13:12:52 +10:00
TODO Use new tracker package interface 2016-02-07 18:49:35 +11:00
client.go Move Client.connectionLoop to connection.mainReadLoop 2016-09-11 14:32:56 +10:00
client_test.go Relax the seeder torrent connection stats test 2016-09-02 15:26:21 +10:00
config.go Rework storage interfaces to make them simpler to implement 2016-09-02 15:10:57 +10:00
conn_stats.go Add connection read stats 2016-07-12 16:42:04 +10:00
connection.go Move Client.connectionLoop to connection.mainReadLoop 2016-09-11 14:32:56 +10:00
connection_test.go Add a benchmark for readMainLoop piece decoding 2016-09-11 15:43:57 +10:00
doc.go List implemented BEPs 2016-07-11 13:53:00 +10:00
example_test.go Merge Torrent and torrent types 2016-04-03 18:40:43 +10:00
file.go Fix receiver pointeriness for some File methods 2016-04-19 17:20:31 +10:00
file_test.go Add File.Cancel 2016-02-05 01:18:54 +11:00
global.go Prepare to allow max conns per torrent to be configured 2016-07-05 16:23:17 +10:00
issue97_test.go Rework storage interfaces to make them simpler to implement 2016-09-02 15:10:57 +10:00
main_test.go Skeleton TestMain 2016-07-10 22:58:43 +10:00
misc.go Merge all our global consts and vars into global.go 2016-04-14 17:19:07 +10:00
misc_test.go Replace go-check with testify 2015-08-03 16:23:05 +10:00
pex.go Redo the compact peer types 2015-08-17 19:52:47 +10:00
pex_test.go Redo the compact peer types 2015-08-17 19:52:47 +10:00
piece.go Comment on PiecePriorityNext 2016-08-30 16:55:50 +10:00
piecestate.go Change the way piece state is exposed to give more detail 2015-06-01 18:22:12 +10:00
reader.go Rework Reader position changes affecting piece priorities 2016-08-30 15:41:26 +10:00
reader_test.go Also fix "context" in reader_test.go 2016-04-30 11:46:45 +10:00
spec.go Move TorrentSpec stuff into its own file 2016-09-11 14:09:40 +10:00
t.go Rework Reader position changes affecting piece priorities 2016-08-30 15:41:26 +10:00
torrent.go Rework storage interfaces to make them simpler to implement 2016-09-02 15:10:57 +10:00
torrent_stats.go Add counters for uploads 2016-07-05 15:52:33 +10:00
torrent_test.go Add test for issue #111 and #112 2016-09-12 16:53:20 +10:00
tracker_scraper.go Improve readability of tracker status line 2016-07-14 13:08:52 +10:00
worst_conns.go Add Torrent.SetMaxEstablishedConns 2016-07-06 00:42:16 +10:00

README.md

torrent

Join the chat at https://gitter.im/anacrolix/torrent Build Status 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 projects using Torrent

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%)