Add trackers to .torrent files in linux

Published: by

  • Categories:

Windows users have BEncode Editor to edit their torrent files without changing info hash of the torrent file. But, linux hasn't yet had a torrent editor.

I use rtorrent for downloading torrents and it doesn't have the feature of adding trackers. To me, that is very necessary because in my institute, many trackers are blocked and I have to reply on UDP trackers to get the seeds/peers stats.

There is a python library named bencode that helps you editing the torrent file but there is no usage given on the internet.

So, here is an example script to add torrents to a .torrent file using bencode.

  • This script assumes that you have a file that contains the list of trackers separated by new-lines. (first argument to the script)
  • This script creates a new torrent file in the current directory with the added trackers.
  • The script takes the input torrent file as the second argument.

WARNING: Use it only on public trackers, otherwise it will get you banned.

#!/usr/bin/python2

"""
Author: shadyabhi (abhijeet[dot]1989[at]gmail[dot]com)

"""

import bencode
import sys
from os import path

if len(sys.argv) < 2:
    print "First argument: File containing trackers"
    print "Second argument: .torrent file"
    sys.exit(0)

tracker_file = open(sys.argv[1])
torrent_file = open(sys.argv[2])

trackers_list = []
#Creating the list of trackers.
trackers_list[:] = (value for value in tracker_file.read().split("\n") if value != '')
decoded_data = bencode.bdecode(torrent_file.read())

print "Trackers Before: "
for tracker in decoded_data['announce-list']:
    print tracker

for tracker in trackers_list:
    if tracker not in decoded_data['announce-list']:
        decoded_data['announce-list'].append([tracker])

print "Now, the trackers in the torrent are: "
for tracker in decoded_data['announce-list']:
    print tracker

#Writing the torrent file
f = open("new_"+path.basename(sys.argv[2]), "w")
f.write(bencode.bencode(decoded_data))
f.close() 

Sample Usage:

shadyabhi@archlinux ~/github/bencode_py $ python2 add_tracker.py /media/abhijeet/Misc/trackers ~/house.torrent 
Trackers Before: 
['http://10.rarbg.com:80/announce']
['http://9.rarbg.com:2710/announce']
['udp://11.rarbg.com:80/announce']
Now, the trackers in the torrent are: 
['http://10.rarbg.com:80/announce']
['http://9.rarbg.com:2710/announce']
['udp://11.rarbg.com:80/announce']
['udp://tracker.openbittorrent.com:80']
['udp://tracker.publicbt.com:80']
['udp://tracker.ccc.de:80']
['udp://tracker.istole.it:80']
['udp://tracker.1337x.org:80/announce']
['udp://tracker.torrentbox.com:2710']
['udp://tracker.openbittorrent.com:80']
['udp://tracker.torrentbox.com:2710']
['udp://tracker.openbittorrent.com:80/announce']
['udp://tracker.publicbt.com:80/announce']
shadyabhi@archlinux ~/github/bencode_py $ ls
total 36K
-rwxr-xr-x 1 shadyabhi users  960 Oct 14 02:20 add_tracker.py
-rw-r--r-- 1 shadyabhi users 3.2K Oct 13 20:12 bencode.py
-rw-r--r-- 1 shadyabhi users 4.4K Oct 13 20:12 bencode.pyc
-rw-r--r-- 1 shadyabhi users  786 Oct 14 02:05 check_trackers.py
-rw-r--r-- 1 shadyabhi users  15K Oct 14 02:51 new_house.torrent
shadyabhi@archlinux ~/github/bencode_py $

You can also get the script at https://github.com/shadyabhi/Bencode-Torrent-Editor.