Show HN: Exatorrent – Self-hostable Torrent client written in Go
github.com
github.com
I have worked on this for past few months . exatorrent is BitTorrent Client written in Go. It can be run locally or be hosted in Remote Server with good resources to use that Server as SeedBox. It is Single Completely Statically Linked Binary with Zero External Dependencies .
exatorrent is simple yet feature-rich . It is lightweight and light on resources. It comes with Beautiful Responsive Web Client written in Svelte and Typescript , but thanks to documented WebSocket API of exatorrent , you can also write your own client or integrate with other services if you want to.
exatorrent can operate in Optional Multi-User Mode administrated by admin user/s but it can successfully be used by Single-User as well. Torrented Files are stored in local disk of device where it's run, which are then retrievable or streamable via HTTP.
I hope you like it . It's Open Source .
Also HN , I am looking for Internship . If you're interested , please email me
johnchristopher@localhost ~/Download
$ ./exatorrent-linux-amd64
Address => :5000
Directory => exadir
[INFO] 2021/08/25 22:48:04 Adding Admin user with username "adminuser" and password "adminpassword"
[INFO] 2021/08/25 22:48:05 Torrent Client Created
[INFO] 2021/08/25 22:48:05 Starting server on :5000
[INFO] 2021/08/25 22:48:05 Loaded 20 trackers from https://ngosang.github.io/trackerslist/trackers_best.txt
[INFO] 2021/08/25 22:48:05 Loaded 20 trackers in total , eliminating duplicates
[INFO] 2021/08/25 22:48:05 Added Loaded Trackers to Torrents
Extra points for logging relevant info when first starting it up and not taking me on a hunt in a readme or something :).https://github.com/anacrolix/torrent
for those cases.
You can replace 'Hetzner' with any VPS service here, really. What measures can one take to 'hide' torrenting activity?
I assume their problem would be mostly with a huge amount of traffic, not torrent per se.
If only they didn't put 5.14 kernel into their rescue image this summer, but that's another story.
Whether a particular client exposes this or not depends. In the case of this project... looks like upstream github.com/anacrolix/torrent does support encrypted connections. Not clear how to force it to use _only_ encrypted connections though.
This is for rapidbay but should work for any service: https://github.com/hauxir/rapidbay/wiki/Setting-RapidBay-up-...
It would be nice to have a single binary that can run traffic through a VPN and something I have not see done before.
You can route network of exatorrent through network/VPN .
Also, wireguard implemented in Linux kernel is faster than userspace implementation of wireguard-go . No?
that always comes with the danger of not going through VPN if the connection somehow drops or you've restarted the machine its running on and the vpn started after the torrent client.
and the linux kernel implementation isnt necessarily available if its running in a docker container of some NAS or even on a windows machine.
it would also make it easier to use, allowing more people to utilize the tech.
My current setup uses namespaces to avoid this issue. Basically, one can create a wg interface in the default namespace and then move it to a new namespace and run applications there. The wg interface keeps routing the encrypted traffic through the interfaces in the default namespace, but as there is only the wg interface in the new namespace, there is no risk of leaking any traffic. It also doesn't need a network bridge and doesn't disturb the network configuration of the host.
I use lxc, but there are probably more lightweight options to just start an application in a different network namespace.
This relieves me having to manage restarts when the VPN connection issues for example a new IP. I currently just allow some scripts to refresh things when the uplink changes.
I will consider this.
Here's an overview https://fly.io/blog/ssh-and-user-mode-ip-wireguard/
That currently just creates an interface, but that is just for raw packets. The kernel is the one that is still handling the IP connections.
To have a process do what you are implying would require an entire userspace TCP/IP stack.
These are pretty rare. Slip4netns is an example of one.
See also https://fly.io/blog/ssh-and-user-mode-ip-wireguard/ which has already done this for SSH through wireguard-go
But that probably goes beyond the scope of this project.
Very cool nonetheless!
AWS S3 used to have torrent client (seed-only), which could not be self-hosted.
What's the use-case of Wangpan? I assume it's not "I don't want to torrent illegal things on my home network" because such a service could rat me out just as well.
Imagine you want to stream a video file on your mobile, but:
1) The video file is only available via a torrent along with other files you don't want to watch right now, and
2) Your internet connection doesn't have great throughput, and
3) You will watch the file on a mobile device, so can compromise on resolution and compression.
The easiest thing would be to download the torrent on Baidu Wangpan, and then stream the parts you want to your mobile device.
Was there a specific reason you built this or did you just want to create a showcase?
exatorrent helped me to learn new things ( go , databases , typescript , websocket , CI/CD ,etc.).
so,here it is.
Though in ideal cases (ones with high active seeders), that isn't going to affect performance that much. Torrent can also use UDP hole punching, but that can sometimes be finnicky behind CGNATs
I'm not sure if it would work for torrenting but I can't think of a reason why it wouldn't.
The thing is Mullvad offers dynamic Port-Forwarding only. They get to decide what port number they can grant for users and users cannot request for a specific port. There are VPNs that have static port-forwarding which is rare. There are less than 5 VPN providers that have static port-forwarding from what I remember and users can decide what port number they want (unless specific port number is taken prior). It would be a pain if someone have a range of applications that already using specific port prior and would have to change them to use the VPN's defined port number depending on how much applications they have to change.
I have yet to see a torrent client that doesn't let you specify the public port it's listening on.
So you may want to rethink your approach in terms of putting forth qualities that speak to your engineering prowess.
I also wouldn't personally use this software as it has so many 3rd party dependencies that one would find it hard to audit or make any robustness / security guarantees.
He's demonstrating competence in writing go (and yes, selecting 3rd party libraries and stitching them together is often a skill you need in the Real World), using docker, understanding web apps with Svelte + typescript, etc. Scratching his own itch, literally the original hacker ethos.
Nice work, OP. Good luck in your search.
Please Open Issue if you find any Bad or Buggy Code . I would correct it.
Also , exatorrent doesn't use much 3rd party libraries like you think
For example: thank you. Also, exa…
I’ve been using Synapse (https://synapse-bt.org/synapse/, a torrent client written in Rust) recently and so far it was the only client fully saturating a 10Gbps NIC.
Also you can measure Memory Usage and other Stats in real time in Web Client of exatorrent(also there is API for it)
Is it possible to control it via web interface ?
I wanted to create Windows executable. I tried cross compiling using mingw and asked my friend to test it but it reported some error namely libstdc++ error and similar ones. So,i focussed first on releasing software first and look into this issue later.
I also wanted to release Binary for MacOS too ,so went to setup osxcross cross compiler but couldn't setup it properly too. I wanted to work on this after release.
So, Help is appreciated regarding this matter.
Source: https://dustingram.com/articles/2021/04/14/powering-the-pyth...
> The “maximum” here is per-day, so this means that at the peak (which was the day I made these graphs) PyPI served nearly 900 terabytes over more than 2 billion requests per day.
I think this number is dated but its what I stumbled across.
I haven't used this a long time, but it used to be faster than mirrors where I was.
One caveat is that either your client and router both have to support UPnP, or you have to manually open up a port for UDP traffic in your router and forward that to the machine you're running the client on.
I also use transmission-create to make torrents from the cli, but the UI of your client will have an option.
I use magnets to transfer all large files - although if there's anything confidential in the file, encrypt it first. The only thing keeping people from plucking your files out of the ether is a lack of interest.
-----
[1] Such as https://newtrackon.com/list
[2] Which are magnet:?xt=urn:btih:[insert torrent hash here]
Torrent hashes can be found in the UI of your client, or at the beginning of the actual .torrent file.