_
____ ____ (_)___ ___
/ __ \/ __ \/ / __ \/ _ \
/ / / / /_/ / / /_/ / __/
/_/ /_/ .___/_/ .___/\___/
/_/ /_/Share files between devices on the same network.
Why?Why?
Because it's the year 2026, the future is here with computers creating art, but I still used Signal to share files between devices next to each other. So I had futuristic technology build me something simple. It was my first time trying out Claude, and I think it did pretty well!
How?How?
The server puts clients into different subnets per RFC 1918:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
Clients can download files when they connect from the same subnet as the uploader.
A trusted reverse proxy makes sure that the source IP address is set based on the TCP connection. Attackers can spoof this address, but to my knowledge they won't receive the response.
/32 (IPv4) or /128 (IPv6) is used for clients that connect with a public IP address. The server assumes that they own their IP address. However, CG-NAT breaks that assumption: ISPs assign the same public IP address to multiple customers. The same happens for VPN users sharing exit nodes.
This makes using my hosted instance, https://npipe.io/, pretty bad for privacy from other users, without even considering privacy from whoever runs the server (me), so I don't recommend actually using it, but hosting it yourself.
inspired by ncat --broker
I tried it, but I don't think it offers any benefits over what I use now-- magic-wormhole, syncthing, and noteonline.
I do like what you did with the squareular upload progress indicator style though.
Thanks for trying it out!
Thanks! It was my idea iirc, but I honestly probably wouldn’t have bothered without Claude.
there are so many projects that solve this usecase. I like localsend https://github.com/localsend/localsend for "sending" fileswhich is a little different than the "download" paradigm
Yes, I agree! This has definitely been solved a million times before, in many different ways (including how I used Signal before).
But that’s also the point of why I made this: I want to solve it exactly for my needs. And there’s a certain kind of satisfaction in using your own tools, where you know exactly where the sharp edges are, how to modify them to fit evolving needs, and they aren’t dumbed down to some common denominator.
And I wanted to try out Claude.
How do I obtain it? Clone the repo?
Haha, good question. Yeah, it’s a go program. So clone and
go buildshould be all you needCan I have a toke?