Full-featured BitTorrent client package and utilities
Go to file
Matt Joiner 3c801bed27 Export torrent.String to Torrent 2016-02-20 14:39:56 +11:00
bencode Actually fix #41 properly; and several big changes 2015-12-07 03:28:28 +11:00
cmd Ditch Data.WriteSectionTo, and fix cmd/torrent-verify 2016-02-18 11:45:31 +11:00
data Ditch Data.WriteSectionTo, and fix cmd/torrent-verify 2016-02-18 11:45:31 +11:00
dht go vet 2016-02-02 00:44:29 +11:00
fs Fixes for torrent.Reader not having ReadAt 2016-01-18 20:12:51 +11:00
internal Remove internal/pieceordering 2016-01-18 20:11:53 +11:00
iplist Avoid allocation in iplist.Ranger.Lookup 2015-10-19 00:00:26 +11:00
logonce
metainfo missinggo.ZeroReader is now a var, not a type 2016-02-05 01:20:02 +11:00
mmap_span Ditch Data.WriteSectionTo, and fix cmd/torrent-verify 2016-02-18 11:45:31 +11:00
mse Some utils moved to missinggo 2015-08-04 00:29:01 +10:00
peer_protocol
testdata
tracker Retain query parameters from announce URL. 2016-02-14 21:15:51 +01:00
util util/profile was replaced by github.com/anacrolix/envpprof 2016-01-31 18:35:51 +11:00
LICENSE
README.md list cloud torrent in "projects using Torrent" 2016-01-29 16:13:24 +11:00
TODO Use new tracker package interface 2016-02-07 18:49:35 +11:00
client.go Remove pointless code 2016-02-17 17:20:43 +11:00
client_test.go Ditch Data.WriteSectionTo, and fix cmd/torrent-verify 2016-02-18 11:45:31 +11:00
config.go Code comments 2016-02-17 17:09:43 +11:00
connection.go Only assert we should be requesting a piece in debug mode 2016-02-15 17:47:04 +11:00
connection_test.go Remove internal/pieceordering 2016-01-18 20:11:53 +11:00
data.go Ditch Data.WriteSectionTo, and fix cmd/torrent-verify 2016-02-18 11:45:31 +11:00
doc.go Add packed IP list 2015-09-23 18:25:22 +10:00
example_test.go Fix the download/prioritize piece functions 2016-01-19 01:28:56 +11:00
file.go Reinstate File.PrioritizeRegion() for backward compatibility 2016-02-07 17:15:06 +11:00
file_test.go Add File.Cancel 2016-02-05 01:18:54 +11:00
issue35_test.go Rename issue 35 testing config function to avoid confusion 2016-02-17 17:08:01 +11:00
magnet.go
magnet_test.go
misc.go
misc_test.go
ordered.go
ordered_test.go
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 Rework requesting of shuffled pending pieces 2016-02-07 21:58:48 +11:00
piecestate.go
reader.go Rework Reader reading, and TestCompletedPieceWrongSize 2016-02-17 18:26:10 +11:00
t.go Export torrent.String to Torrent 2016-02-20 14:39:56 +11:00
torrent.go Ditch Data.WriteSectionTo, and fix cmd/torrent-verify 2016-02-18 11:45:31 +11:00
torrent_test.go Invalid test 2015-08-05 02:38:36 +10:00
worst_conns.go

README.md

torrent

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

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.

$ go get github.com/anacrolix/torrent/cmd/torrent
$ torrent 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
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%)