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.
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: https://github.com/mcourteaux/SpooferBT