Full-featured BitTorrent client package and utilities
Go to file
Matt Joiner 0cf7dd7faf Remove obsolete libtorgo README 2015-04-27 15:04:27 +10:00
bencode
cmd Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
data Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
dht Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
fs Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
internal Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
iplist iplist: Fail invalid IPs, they were always passing 2015-03-28 02:54:17 +11:00
logonce
metainfo Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
mmap_span
mse Use rogpeppe's sortimports to fix this goimports ordering madness 2015-03-26 17:18:08 +11:00
peer_protocol Add support for Fast Extension 2015-03-12 20:06:23 +11:00
tracker Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
util Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
LICENSE The license is MPL2.0 2015-03-25 17:35:33 +11:00
NOTES
README.md dht: Clean-up interface, add loads of documentation 2015-04-01 17:29:55 +11:00
TODO Rework the Torrent Reader interface, to allow reader options, and add "responsive" as one such option 2015-04-14 23:59:41 +10:00
client.go Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
client_test.go Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
config.go Add the --disable-tcp flag to the client options 2015-04-20 17:35:21 +10:00
connection.go Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
connection_test.go Use rogpeppe's sortimports to fix this goimports ordering madness 2015-03-26 17:18:08 +11:00
file.go Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
magnet.go Make ParseMagnetURI easier to read 2015-03-22 13:50:16 -04:00
magnet_test.go Fix test error message 2015-03-22 13:57:57 -04:00
misc.go Move torrentOffsetRequest and torrentRequestOffset, fixing a bug in former, and test it 2015-04-08 02:20:01 +10:00
misc_test.go Move torrentOffsetRequest and torrentRequestOffset, fixing a bug in former, and test it 2015-04-08 02:20:01 +10:00
ordered.go More cleaning of public interface 2015-03-08 17:28:14 +11:00
ordered_test.go More cleaning of public interface 2015-03-08 17:28:14 +11:00
piece.go Move piece into its own file 2015-04-08 02:14:35 +10:00
reader.go Rework the Torrent Reader interface, to allow reader options, and add "responsive" as one such option 2015-04-14 23:59:41 +10:00
stateless.go Rewrite import paths for migration from Bitbucket 2015-03-20 16:37:44 +11:00
t.go Rework the Torrent Reader interface, to allow reader options, and add "responsive" as one such option 2015-04-14 23:59:41 +10:00
torrent.go Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
torrent_test.go Rewrite import paths for migration from Bitbucket 2015-03-20 16:37:44 +11:00
worst_conns.go

README.md

torrent

Codeship GoDoc

This repository implements BitTorrent-related packages and command-line utilities in Go.

There is support for protocol encryption, DHT, PEX, uTP, and various extensions. There are several storage backends provided, blob, file, mmap. You can use the provided binaries in ./cmd, or use torrent as a library for your own applications.

See also the mailing list, and the Gophers Slack channel.

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.

Commands

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

Note that godo that I invoke in the following examples is a command that 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%)