40

I'm looking for a simple but direct way to transfer a file of any kind and any size between two people. If possible, having only a web browser, without having the file stored on a third machine meanwhile.

I wish to do it without requiring the end users to connect to a third server, because that way the data will flow through the machine xyz.com, possibly slowing down the transfer, and posing security risks.

I would like to avoid setting up a whole FTP server just for occasional file transfers. So far I have discovered JetBytes, Click2Copy and PipeBytes. Those web services should make the transfer easy. However the traffic goes through their servers so they are no good to what I want.

I want the transfer to be direct between the client and me. Encryption would be a nice additional feature.

I know that doing so I have to open one port on my computer, and configure a bit port redirection on my router. However, NAT traversal would be nice addition, too.

My question is:

Is there a simple way for one single end-to-end direct file transfer between two computer, avoiding third parties? (if possible, with encryption and NAT traversal)

4
  • are you looking for a solution that transfers only through HTTP or what?
    – Pacerier
    Jul 29, 2011 at 17:29
  • Personally I use a chroot jailed web server with autoindexing turned on to share files with other people. Then I have a jailed ftp anonymous account that people can use to send files directly to me. The Skype solution is something I'd tell my mom if she wanted to share a file with someone. It's better than using email attachments at least.
    – blee
    Mar 12, 2012 at 1:31
  • 2
    maybe direct file transfer program sourceforge.net/projects/file-transfer - open source, drag and drop, promises optionally upnp (on xp?), teredo, secure connections and automatic discovery, (optional stuff needs ticks in settings page)
    – n611x007
    Jun 20, 2014 at 17:33
  • Can we reopen this? I reworded this to implement the suggestions
    – n611x007
    Jun 20, 2014 at 18:36

12 Answers 12

15

The dirtiest way if you use *nix is to use netcat (nc) to cat the file to the remote host. But if you want encryption, you might as well use SCP/SSH.

You have to realize that if either party is behind a NAT and you don't want to setup port forwarding, then it's impossible to make a direct connection without connecting to a third-party server first. The server does not necessarily have to relay the traffic (see http://en.wikipedia.org/wiki/UDP_hole_punching) and most of them don't as bandwidth is costly.

For example, Skype will try to use many NAT traversal methods to establish a direct connection before falling back to relaying traffic through their super nodes. (Skype is a very P2P network.)

As for the account problem. I guess it's unavoidable. All methods will require some kind of configuration or setup which are usually harder than registering an account.

3
20

WebRTC-based solutions give what you need, in perhaps the simplest form. You do connect to a third-party website but that is only for getting the peers connected and not the file transfer part.

Example services:
https://www.justbeamit.com/
https://www.sharedrop.io/

EDIT: I understand this does not meet all the requirements of the OP but there is another, very usable solution: Firefox Send. Using this, you upload your file to a third-party server in an encrypted form. The service gives you a URL, which you can share with others. The URL also contains the key to decrypt the file. They can then download the file. The file is automatically deleted after a set number of downloads or after 24 hours. The server never sees the key and so cannot decrypt the file. The advantage in using a third-party server is that the sharing party and the downloading party do not need to be online simultaneously.

2
  • On my corporate (highly secured) network, reep.io didn't work, but justbeamit.com did! I would have expected both services to work the same since they are both based on WebRTC technology, but it seems that it's a little bit more complicated than that. Thank's a lot for the hint!
    – gaborous
    May 28, 2016 at 11:18
  • 1
    justbeamit.com make it clear in the help section that, although the file is at no point stored on their server, the datastream does actually pass through them
    – lukeuser
    Feb 29, 2020 at 14:12
9

Magic Wormhole can be used for this. On Ubuntu you can install via apt-get (it is also available via Python pip):

sudo apt install magic-wormhole

To send a file you simply tell what to send

wormhole send README.md

This will output the command line you should run on the receiving end. This includes a secret key (which is such that you can also read it over the phone). You don't specify any machine names or IP addresses. Wormhole establishes the connection automatically and encrypts the files to be transferred.

https://magic-wormhole.readthedocs.io/en/latest/welcome.html

8

You can sync files between remote computers using a rsync. This utility is available for Windows in cygwin, or you can install it with the pre-packaged cwRsync.

I'll leave my previous answer here intact, but given recent revelations about the NSA, I would no longer recommend Skype for secure file transfers.

You can send a file directly to another person using Skype. Skype sometimes even works when both users are behind NAT. If you are saavy enough to open a port on your router, doing so will increase the likelihood of a negotiating a direct connection.

More broadly, many chat programs include a file sharing/sending mechanism. Most don't supply encryption by default like Skype. But as long as you and your recipient have the same chat client, you have a "simple tool" for sharing files.

3
  • Thank you for this answer. The problem here is that I always have to rely on a third company, create an account specifically for that, and that service may disrupt or terms of service may change. If possible I would like to avoid that. However I did not know that Skype can negotiate a direct connection. Still from your answer I can infer that this is not always the case?
    – Benoit
    Jul 24, 2011 at 8:40
  • @Benoit - I have never had skype fail to be able to send a file. The only traffic that goes to the skype servers is that to set up the connection. All data goes between you and your recipient. As for the terms of service that is very unlightly as file sharing is a central part of skype.
    – Nifle
    Jul 24, 2011 at 9:22
  • @Benoit Skype always uses direct connections; even the database of Skype users is distributed. The benefit to Skype is its end-to-end encryption; Skype can't see the data you're transmitting. (+1 btw)
    – squircle
    Jul 26, 2011 at 22:19
5

If your running Linux / unix ssh is a secure way to transmit files in a client server model. port forwards needed on incoming connections if behind NAT though.

3

FTP. It's been around for ages. It's insecure as heck. And it's simple.

Download Filezilla, which can function as both a server and client. Make sure your firewall is set to allow it outbound. Have your destination download filezilla and connect to your filezilla server. Transfer file.

Just like that, all your bits are flung across the internet for all to see like so much laundry flipping in the breeze in the backyard.

2
  • 1
    Is also not that reliable. You need hash checks to make sure what you got is exactly what you sent. TCP/IP pretends to be reliable but at the end of day is not 100%. For example Just tried to send a several giga byte backup and found that the zip I made has errors on the target, but not on the source. No errors shown. Hashes for the whole are good, but can still give you a false ok. Several hashes each at 1 mb points each are better. So torrent between the two computers would be better for a big file.
    – rxantos
    Jan 14, 2018 at 3:29
  • 1
    FTP does have a hard time with really, really large files (it really never considered the use of files as large as we have today when it was developed). SFTP is a much better equipped protocol for larger files and is also much, much more secure than FTP.
    – MaQleod
    Feb 16, 2019 at 22:36
2

A webserver that can do UPnP NAT traversal would work, the receiver would only needs a web browser. As a bonus encryption is easy with a web server, just use https.

Here is one example (payware 99USD) RaidenHTTPD

2

Bit torrent sync does synchronize folders over the web. Files are encrypted also. Check it out.

http://www.bittorrent.com/sync

2

I once wrote a blog post about transferring files with Python’s built-in HTTP server. In short, install Python, open a command prompt, cd to the directory with files to share and execute python -m SimpleHTTPServer. Very convenient if you are on Linux or OS X because Python is installed by default (it's easy to install on Windows too).

If you are behind a NAT, then you need to setup port forwarding on your router or something (which I assume you know already).

3
  • 1
    'blog post' link goes to a spam site
    – MFB
    May 25, 2015 at 3:52
  • @MFB I'm guessing it used to go to his legitimate website, but he's since lost control of the site and it now redirects to a parked domain type page. I've edited the link out for now. To phunehehe, if you see this, please comment regarding the link. If you have a copy of the blog post somewhere else now you can edit that in, but beware that intentionally linking to spam won't be tolerated.
    – nhinkle
    May 25, 2015 at 4:57
  • at long last I have recovered the blog post, updated :)
    – phunehehe
    Apr 5, 2016 at 10:37
1

You should check out http://filesovermiles.com It appears to do exactly what you want. Direct P2P transfer via browser(flash).

1
  • 4
    What are the benefits of the solution you suggest? Nov 8, 2012 at 8:20
1

You may try out Folder Transfer from http://www.foldertransfer.com, which can direct transfer of a file between two computers on the Internet. It can fully meet your needs.

1

Why noone is mentioning IRC DCC transfer? https://en.wikipedia.org/wiki/Direct_Client-to-Client, You get you HexChat client, install it on both computers, you enter let's say Freenode and then create a channel for both to join, then right click on the other "contact/PC" and send file. Old tech that always works, apart from Hyperterminal for dial up direct connection, circa 1995-1998, DCC was the mainstream way to download music and movies.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .