🔷 (File Transferring Utility) Transfer files through the Net 🔷
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Unbewohnte 74464c9470 [main] verbose output flag changed to ?; [node] added 3 microsecond delay in sender node when sending file info packets 3 years ago
src [main] verbose output flag changed to ?; [node] added 3 microsecond delay in sender node when sending file info packets 3 years ago
.gitignore Installation script, improved README 3 years ago
COPYING Moved to GPLv3 3 years ago
Makefile [Make] output clean executable names 3 years ago
README.md [main] verbose output flag changed to ?; [node] added 3 microsecond delay in sender node when sending file info packets 3 years ago
install.sh [README] updated information; [installation process] added install.sh; [protocol] added DIRECTORY header description 3 years ago

README.md

ftu (FileTransferringUtility)

Send files through the Net !


● What is that ?

A P2P (decentralized) file sharing program, overcomplicated and an overengineered one.

● Why ?

Learning

● How does this work ?

In order to transfer one file on one computer to another - they need to establish a connection.

In order to establish a connection - there needs to be a 1) sender (server) (the owner of the file), waiting for connections, and a 2) receiver (client), who will try to connect to a sender (server). If the requirements are met - client will connect to server and the packet exchange will begin.

The server and the client needs to communicate with packets according to certain rules, given by a protocol.

The packet has its header and body. They are divided into several groups of use by headers, this way we can specify what kind of data is stored inside packet`s body and react accordingly.

Thus, with a connection and a way of communication, the sender will send some packets with necessary information about the file to the receiver that describe a filename, its size and a checksum. The client (receiver) will have the choice of accepting or rejecting the packet. If rejected - the connection will be closed and the program will exit. If accepted - the file will be transferred via packets.


● Installation

● From release (Pre-compiled)

  • Proceed to releases page
  • Choose a version/architecture you have and download an archive
  • Unpack an archive
  • If on GNU/Linux - run chmod +x install.sh && sudo ./install.sh

● From source (Compile it yourself) (You need Go and git to be installed on your machine)

  • git clone https://github.com/Unbewohnte/ftu.git
  • cd into the folder
  • If on GNU/Linux - run make && sudo make install or make && chmod +x install.sh && sudo ./install
  • else - cd into src/ folder and simply run go build; after that you`re free to put the binary wherever you desire

Now you have ftu installed !


● Usage

ftu -h - to print a usage message

ftu [FLAGS]

● FLAGs

  • -p [uint] for port
  • -r [true|false] for recursive sending of a directory
  • -a [ip_address|domain_name] address to connect to (cannot be used with -s)
  • -d [path_to_directory] where the files will be downloaded to (cannot be used with -s)
  • -s [path_to_file|directory] to send it (cannot be used with -a)
  • -? [true|false] to turn on|off verbose output
  • -v print version text
  • -l print license

● Examples

ftu -p 89898 -s /home/user/Downloads/someVideo.mp4 creates a node on a non-default port 89898 that will send "someVideo.mp4" to the other node that connects to you

ftu -p 7277 -a 192.168.1.104 -d . creates a node that will connect to 192.168.1.104:7277 and download served file|directory to the working directory

ftu -p 7277 -a 192.168.1.104 -d /home/user/Downloads/ creates a node that will connect to 192.168.1.104:7277 and download served file|directory to "/home/user/Downloads/"

ftu -s /home/user/homework creates a node that will send every file in the directory

ftu -r -s /home/user/homework/ creates a node that will send every file in the directory !RECUSRIVELY!


● Testing

make test or in "src" directory go test ./...


● Inspired by croc


● License

GPLv3 license