Can’t download torrents on the network of your school or company because UDP has been blocked? There is a solution!

Some career networks block UDP, probably for gaming and video chats, etc… However, communication with a torrent tracker goes also over UDP, in order to keep the data packages as small as possible. In the beginning, torrent clients communicated with trackers via HTTP, which goes over TCP. However, HTTP gives a whole load of overhead: TCP/IP layer and the HTTP layer. To reduce the amount of network traffic for trackers, a new protocol was developed using UDP that had as goal to be as small as possible. That’s great! But now we can’t download anymore…

So, to bypass this problem, I wrote an application that uses TCP instead, while the tracker still uses UDP. I call it “SpooferBT”. Maybe, “spoofing” isn’t completely the correct terminology, but I like it.

So normally you have:

  [Torrent Client]     <--- UDP --->     [Tracker]

But this application does this:

  [Torrent Client]  <-X- UDP Blocked --->  [Tracker]
          |                                    |
          |                                    |
     Local UDP                                UDP
          |                                    |
          |                                    |
  [SpooferBT Proxy]    <--- TCP --->  [SpooferBT Server]
                                           or Host

In this setup, Torrent Client and SpooferBT Proxy run both localhost. SpooferBT Proxy is my application that pretends to be a tracker. But in fact, it just forwards all the requests from the torrent application to an external auxiliary server (SpooferBT Server), which will perform the actual request to the real tracker. The respond will follow the same path back to the torrent client.

So, to make this thing work, you have to add a tracker for your torrent to the list of trackers in the torrent client. The tracker you want to add is of course your own localhost “fake” tracker. Then how do you specify which real tracker will be used? Well, that is a command line argument for the SpooferBT Proxy component.

Localhost serving as a tracker
Localhost serving as a tracker

You will need:

  • Network that blocks UDP
  • External server that can use UDP (preferably reachable with SSH to launch the server-side of my software)
  • Torrent Client
  • Java JRE
  • My application (download at GitHub)

The project is available at GitHub here:


5 thoughts on “Spoofer BT

  1. This doesn’t seem to work, the server does send a reply, usually 1024 or 33 in length, but the torrent client is either not receiving the response or not understanding it.

    1. Have you carefully read the documentation? Also make sure to take a look at the run example at the GitHub page. I haven’t used this in a while, but basically it forwards all data as-is through the mechanism. It doesn’t interpret anything (although there are pieces of code that interpret packages, this code is not used anymore).

    1. I don’t know heroku, but by looking at their website, it seems they do not support Java applications. I used to use a Koding VM (not longer entirely free, I believe, but still cheap though). Another possibility is to make this work over HTTP; this way it could be ran on RetHat Cloud servers. I’m obviously not planning to implement HTTP support. You can make that on your own if you want, the GitHub repository is public. And I’m hanging around to merge in pull requests.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s