Live data from Hacker News

Magic Wormhole: get things from one computer to another, safely

github.com

251–260 of 262 posts

Re: Magic Wormhole: get things from one computer to another, safely

#251

Earlier quoted context omitted.

I (Electrical + Software Engineer) once worked for a physicist who believed that anything less than an order of magnitude was merely an engineering problem. He was usually correct.

An order of magnitude isn't a defined quantity, it depends on what base you're working in.

The difference between log 2, ln, and log 10 is less than an order of magnitude, so to a physicist it's all the same :)

Re: Magic Wormhole: get things from one computer to another, safely

#252
post #144
post #40

Earlier quoted context omitted.

> if you want a non-Python runtime for some reason [...] Magic Wormhole project has its own alternate implementation https://github.com/magic-wormhole/magic-wormhole.rs , which is also used by delightfully designed GNOME and Android apps; [Warp]( https://apps.gnome.org/Warp/ ), and [Wormhole]( https://play.google.com/store/apps/details?id=eu.heili.wormh... ), respectively.

There's also a Haskell implementation (besides the Go one pointed out above). They all interoperate.

Thank you. What protocol are they using to interoperate?

Re: Magic Wormhole: get things from one computer to another, safely

#253

I don't recall where I saw it (either the Python or Rust implementation, most likely), but there was talk about trying to turn this into a browser plugin. I would love to be able to use my browser to send files to someone else (via their browser, if they so choose).

Not magic-wormhole compatible, but saw these shared on other comments:

- https://wormhole.app

- https://sendfiles.dev

- https://file.pizza

- https://winden.app

Re: Magic Wormhole: get things from one computer to another, safely

#254
post #17

I realize this is a dumb question, but what's a good way to do this between an iPhone and a MacBook? Airdrop is disabled (by policy), iCloud storage is full (because I'm lazy), and I use syncthing on every other device, but I haven't found a client I can use on my work iPhone.

Use Signal. If you install the desktop client Signal has a special "Note to Self" address you can use to transfer message attachments between devices.

I use Telegram to transfer (and store) a crazy lot of stuff. Unlimited storage, with file sizes limited to 2GB (or 4GB for premium users).

Re: Magic Wormhole: get things from one computer to another, safely

#255

Earlier quoted context omitted.

It took this far down in the comments to get to some inkling of the meat of this. It relys on some singular or small set of donated servers? NAT NAT traversal is obviously the biggest motivator, since otherwise you just scp or rsync or sftp if you don't have the dual barrier. Is the relay server configurable? Seemed to be implied it is somewhat hardcoded.

Yes, it relies on two servers, both of which I run. All connections use the "mailbox server", to exchange short messages, which are used to do the cryptographic negotiation, and then trade instructions like "I want to send you a file, please tell me what IP addresses to try". Then, to send the bulk data, if the two sides can't establish a direct connection, they fall back to the "transit relay helper" server. You onl…

Both sides behind NAT is surely the most common use case by a mile? Do you keep stats?

I would have thought NAT hole punching was a basic requirement for something like this...

Re: Magic Wormhole: get things from one computer to another, safely

#256
post #148

Earlier quoted context omitted.

I overall agree, but "reliable holpunching" is an oxymoron. Hole punching is by definition an exploit of undefined behavior, and I don't see the specs getting updated to support it. UPnP IGD was supposed to be that, but well...

Well, with v6 you're down from NAT-hole-punching to Firewall-hole-punching, which in principle should be as simple as arranging the IP:Port pairs of both ends via the setup channel, and then sending a "SYN" packet in both directions at once. Then, trying to use e.g. TCP Prague (or, I guess, it's congestion control with UDP-native QUIC) as a scalable congestion controller, to take care of the throughout restrictions c…

>> sending a "SYN" packet in both directions at once.

Might be a totally dumb question but how does this work? Wouldn’t you already have to have communication to set a time?

Re: Magic Wormhole: get things from one computer to another, safely

#257
post #248

Earlier quoted context omitted.

Reliability is fine, performance is, depending on your demands, not. F the coordination server is not up to task of matching throughput of the two servers, and a lot of bytes need to be transferred, then it's noticable. But the tech at large works, depending on the implementation you choose to use. (I'm partial to Tailscale, although that's a different service, it lets me transfer files between computers (with additi…

I'm sorry but was your reply meant for me? and if so was the reliable way DERP as you mentioned?

Yes, DERP is the protocol that Tailscale uses to pouch through NAT reliably by using a coodination server.

Re: Magic Wormhole: get things from one computer to another, safely

#258

Earlier quoted context omitted.

It was useless for large files when I tried it, at least on Firefox. It seemed to be trying to pull the entire file into RAM.

As someone who's been working on a file upload service for a while, this is the only real way to download very large files on Firefox. The file system access API is a great way to write chunks of a file at a gime, but for now Firefox doesn't support it https://wicg.github.io/file-system-access/ https://mozilla.github.io/standards-positions/#native-file-s...

Firefox can definitely download very large files with no problem, JS doesn't even need to be involved, downloading a file is ancient browser functionality.

The server sends an application/octet-stream response and a few other headers and it works.

Re: Magic Wormhole: get things from one computer to another, safely

#259
post #148

Earlier quoted context omitted.

Well, with v6 you're down from NAT-hole-punching to Firewall-hole-punching, which in principle should be as simple as arranging the IP:Port pairs of both ends via the setup channel, and then sending a "SYN" packet in both directions at once. Then, trying to use e.g. TCP Prague (or, I guess, it's congestion control with UDP-native QUIC) as a scalable congestion controller, to take care of the throughout restrictions c…

>> sending a "SYN" packet in both directions at once. Might be a totally dumb question but how does this work? Wouldn’t you already have to have communication to set a time?

That's why protocols like this have what Wormhole calls a "mailbox server", which allows two ends separated by firewalls to do secure key exchange and agree upon a method for punching through directly. See also STUN: https://en.wikipedia.org/wiki/STUN

Re: Magic Wormhole: get things from one computer to another, safely

#260
post #96

Earlier quoted context omitted.

There are two servers. The "mailbox server" helps with handshakes and metadata transfers, and is super-low bandwidth, a few hundred bytes per connection. The "transit relay helper" is the one that handles the bulk data transfer iff the two sides were unable to establish a direct connection. I've been meaning to find the time to add NAT-hole-punching for years, but haven't managed it yet. We'd use the mailbox server m…

The folks on the wormhole-rs fork (who appear to share your Github organization? [1]) already have NAT punching working 95+% of the time in my testing, so maybe what they're doing could be ported over to the Python implementation. [1] https://github.com/magic-wormhole

That is just using normal STUN/TURN via another server that one of those developers is running
Post reply on HN