Unbewohnte
a43b0a10b3
|
3 years ago | |
---|---|---|
checksum | 4 years ago | |
encryption | 4 years ago | |
protocol | 3 years ago | |
receiver | 3 years ago | |
sender | 3 years ago | |
.gitignore | 3 years ago | |
LICENSE | 4 years ago | |
README.md | 3 years ago | |
go.mod | 3 years ago | |
install.sh | 3 years ago | |
main.go | 3 years ago |
README.md
FTU (FileTransferringUtility)
Send files through the Net !
● What is that ?
A P2P file sharing program, but overcomplicated and probably 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.
● Known issues|problems|lack of features|reasons why it`s bad
VERY slowVERYexpensive on resourcesLack of proper error-handlingLack of information about the process of transferringNo way to verify if the transferred file is not corruptedNo encryptionNo testsNo interrupt signal handling
● Good points
- It works.
● Installation
● From release (Pre-compiled)
- Proceed to releases page
- Choose a version/architecture you have and download an archive
- Unpack an archive
● 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 foldergo build
- to simply compile for your OS/ARCHITECTURE ||CGO_ENABLED=0 go build
- to compile a static executable
● Final steps (optional)
cd
into folder if you`re not there alreadychmod +x install.sh
- make installation script executablesudo ./install.sh
Now you have ftu installed !
● Usage
ftu [FLAGS_HERE]
● Flags
ftu --help
- to get all flags` description
-port
(int) - specifies a working port (if sending - listens on this port, else - tries to connect to this port);-addr
(string) - specifies an address to connect to;-sharefile
(string) - specifies path to a file you want to share, if given a valid path - sender will offer to download this file to receiver;-downloadto
(string) - specifies path to a folder where the receiver wants to store downloaded file;
● Examples
ftu -sharefile="/home/some_path_here/FILETOSHARE.zip"
- creates a server that will shareFILETOSHARE.zip
on port8080
ftu -sharefile="/home/some_path_here/FILETOSHARE.zip" - port=727
- same as before, but on port727
ftu -downloadto="/home/some_path_here/Downloads/" -addr="192.168.1.104"
- creates a client (receiver) that will try to connect to192.168.1.104
(local device) on port8080
and if successful - downloads a file to given pathftu -downloadto="/home/some_path_here/Downloads/" -addr=145.125.53.212 -port=8888
- same as before, but will try to connect to145.125.53.212
on port8888
● Testing
In 'ftu' directory:
go test ./...
- to test everythinggo test -v ./...
- to test everything, with additional informationgo test ./NAME_OF_THE_PACKAGE
- to test a certain package
● IMPORTANT NOTE
This is NOT intended to be a serious application. I'm learning and this is a product of my curiosity. If you're a beginner too, please don't try to find something useful in my code, I am not an expert.
Also, this utility only works if the server side has a port-forwarding|virtual server enabled and configured. Fortunatelly, locally it works without any port-forwarding|virtual servers.
● Inspired by croc
● License
MIT