Browse Source

Installation script, improved README

main 1.3.0
Unbewohnte 3 years ago
parent
commit
a43b0a10b3
  1. 2
      .gitignore
  2. 86
      README.md
  3. 4
      go.mod
  4. 12
      install.sh
  5. 4
      main.go
  6. 2
      protocol/packet.go
  7. 2
      receiver/file.go
  8. 8
      receiver/receiver.go
  9. 2
      sender/file.go
  10. 8
      sender/sender.go

2
.gitignore vendored

@ -1,4 +1,6 @@
FTU FTU
FTU.exe FTU.exe
ftu
ftu.exe
release/ release/
downloads/ downloads/

86
README.md

@ -3,23 +3,20 @@
--- ---
## What is that ? ## What is that ?
This application is like an FTP server, but overcomplicated and probably overengineered monstrosity. (basically a file server, but P2P). A P2P file sharing program, but overcomplicated and probably an overengineered one.
--- ## ● Why ?
## Why ?
Learning Learning
---
## How does this work ? ## How does this work ?
In order to transfer one file on one computer to another - they need to establish a connection. 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 - a client will connect to a server and the packet exchange will begin. 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](https://github.com/Unbewohnte/FTU/tree/main/protocol). The server and the client needs to communicate with packets according to certain rules, given by a [protocol](https://github.com/Unbewohnte/ftu/tree/main/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. 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.
@ -28,62 +25,65 @@ Thus, with a connection and a way of communication, the sender will send some pa
--- ---
## Known issues|problems|lack of features|reasons why it`s bad ## ● Known issues|problems|lack of features|reasons why it`s bad
- **VERY** slow; somewhat FIXED - [x], now **faster** than before - ~~**VERY** slow~~
- **VERY** expensive on resources; somewhat FIXED - [x], no more **json manipulations**, only **raw bytes**`s wizardry ! - ~~**VERY**~~ expensive on resources
- If `MAXFILEDATASIZE` is bigger than appr. 1024 - the packets on the other end will not be unmarshalled due to error ??; FIXED - [x], unnecessary, wrong, deprecated, **destroyed !!!** - ~~Lack of proper error-handling~~
- Lack of proper error-handling; somewhat FIXED - [x] - ~~Lack of information about the process of transferring~~
- Lack of information about the process of transferring; FIXED - [x] - ~~No way to verify if the transferred file is not corrupted~~
- No way to verify if the transferred file is not corrupted; FIXED via checksum- [x] - ~~No encryption~~
- No encryption; FIXED via AES encryption of packets` body - [x] - ~~No tests~~
- Messy and hard to follow code && file structure; FIXED? - [x] - ~~No interrupt signal handling~~
- No tests; FIXED - [x]; Not every packet has its tests, but they are present
## Good points ## Good points
- It works. - It works.
--- ---
## Installation ## Installation
### From release (Pre-compiled) ### From release (Pre-compiled)
- Proceed to [releases page](https://github.com/Unbewohnte/FTU/releases) - Proceed to [releases page](https://github.com/Unbewohnte/ftu/releases)
- Choose a version/architecture you have and download an archive - Choose a version/architecture you have and download an archive
- Unpack an archive - Unpack an archive
### From source (Compile it yourself) (You need [Go](https://golang.org/dl/) and [git](https://git-scm.com/) to be installed on your machine) ### From source (Compile it yourself) (You need [Go](https://golang.org/dl/) and [git](https://git-scm.com/) to be installed on your machine)
- `git clone https://github.com/Unbewohnte/FTU.git` - `git clone https://github.com/Unbewohnte/ftu.git`
- `cd` into the folder - `cd` into the folder
- `go build` - to simply compile for your OS/ARCHITECTURE || `CGO_ENABLED=0 GOOS=os_here GOARCH=arch_here go build` - to cross-compile a static executable for the OS/ARCHITECTURE of your choice (`go tool dist list` - to view the available ones) - `go 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 already
- `chmod +x install.sh` - make installation script executable
- `sudo ./install.sh`
### After installation Now you have ftu installed !
- You probably want to put the executable in some folder and in order not to use it directly from there all the time - add it to the **$PATH** variable
--- ---
## Usage ## Usage
`./FTU [FLAGS_HERE]` or `FTU [FLAGS_HERE]` `ftu [FLAGS_HERE]`
### Flags ### Flags
`./FTU --help` - to get all flags` description `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); - `-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; - `-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; - `-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; - `-downloadto` (string) - specifies path to a folder where the receiver wants to store downloaded file;
### Examples ### Examples
- `./FTU -sharefile="/home/some_path_here/FILETOSHARE.zip"` - creates a server that will share `FILETOSHARE.zip` on port `8080` - `ftu -sharefile="/home/some_path_here/FILETOSHARE.zip"` - creates a server that will share `FILETOSHARE.zip` on port `8080`
- `./FTU -sharefile="/home/some_path_here/FILETOSHARE.zip" - port=727` - same as before, but on port `727` - `ftu -sharefile="/home/some_path_here/FILETOSHARE.zip" - port=727` - same as before, but on port `727`
- `./FTU -downloadto="/home/some_path_here/Downloads/" -addr="192.168.1.104"` - creates a client (receiver) that will try to connect to `192.168.1.104` (local device) on port `8080` and if successful - downloads a file to given path - `ftu -downloadto="/home/some_path_here/Downloads/" -addr="192.168.1.104"` - creates a client (receiver) that will try to connect to `192.168.1.104` (local device) on port `8080` and if successful - downloads a file to given path
- `./FTU -downloadto="/home/some_path_here/Downloads/" -addr=145.125.53.212 -port=8888` - same as before, but will try to connect to `145.125.53.212` on port `8888` - `ftu -downloadto="/home/some_path_here/Downloads/" -addr=145.125.53.212 -port=8888` - same as before, but will try to connect to `145.125.53.212` on port `8888`
--- ---
## Testing ## Testing
In FTU directory: In 'ftu' directory:
- `go test ./...` - to test everything - `go test ./...` - to test everything
- `go test -v ./...` - to test everything, with additional information - `go test -v ./...` - to test everything, with additional information
@ -91,16 +91,16 @@ In FTU directory:
--- ---
## IMPORTANT NOTE ## 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. 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 both the server and the client have a port-forwarding|virtual server enabled and configured. Fortunatelly, locally it works without any port-forwarding|virtual servers. 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](https://github.com/schollz/croc) ## Inspired by [croc](https://github.com/schollz/croc)
--- ---
## License ## License
MIT MIT

4
go.mod

@ -1,3 +1,3 @@
module github.com/Unbewohnte/FTU module github.com/Unbewohnte/ftu
go 1.16 go 1.17

12
install.sh

@ -0,0 +1,12 @@
#!/bin/bash
EXECUTABLE_NAME=ftu
DESTDIR=/usr/bin/
# if ftu is in the same directory - copy it to $DESTDIR
if [ -e $EXECUTABLE_NAME ]
then
cp $EXECUTABLE_NAME $DESTDIR
else
echo "No '${EXECUTABLE_NAME}' in current directory !"
fi

4
main.go

@ -6,8 +6,8 @@ import (
"os" "os"
"strings" "strings"
"github.com/Unbewohnte/FTU/receiver" "github.com/Unbewohnte/ftu/receiver"
"github.com/Unbewohnte/FTU/sender" "github.com/Unbewohnte/ftu/sender"
) )
// flags // flags

2
protocol/packet.go

@ -13,7 +13,7 @@ import (
"net" "net"
"strconv" "strconv"
"github.com/Unbewohnte/FTU/encryption" "github.com/Unbewohnte/ftu/encryption"
) )
// Internal representation of packet before|after the transportation // Internal representation of packet before|after the transportation

2
receiver/file.go

@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/Unbewohnte/FTU/checksum" "github.com/Unbewohnte/ftu/checksum"
) )
// Receiver`s file struct. Used internally by receiver // Receiver`s file struct. Used internally by receiver

8
receiver/receiver.go

@ -10,9 +10,9 @@ import (
"strings" "strings"
"time" "time"
"github.com/Unbewohnte/FTU/checksum" "github.com/Unbewohnte/ftu/checksum"
"github.com/Unbewohnte/FTU/encryption" "github.com/Unbewohnte/ftu/encryption"
"github.com/Unbewohnte/FTU/protocol" "github.com/Unbewohnte/ftu/protocol"
) )
// Representation of a receiver // Representation of a receiver
@ -39,7 +39,7 @@ func NewReceiver(downloadsFolder string) *Receiver {
panic("Downloads folder is not a directory") panic("Downloads folder is not a directory")
} }
incomingPacketsChan := make(chan protocol.Packet, 5000) incomingPacketsChan := make(chan protocol.Packet, 100)
fmt.Println("Created a new receiver") fmt.Println("Created a new receiver")
return &Receiver{ return &Receiver{

2
sender/file.go

@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/Unbewohnte/FTU/checksum" "github.com/Unbewohnte/ftu/checksum"
) )
// Struct that represents the served file. Used internally in the sender // Struct that represents the served file. Used internally in the sender

8
sender/sender.go

@ -8,9 +8,9 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/Unbewohnte/FTU/checksum" "github.com/Unbewohnte/ftu/checksum"
"github.com/Unbewohnte/FTU/encryption" "github.com/Unbewohnte/ftu/encryption"
"github.com/Unbewohnte/FTU/protocol" "github.com/Unbewohnte/ftu/protocol"
) )
// The main sender struct // The main sender struct
@ -38,7 +38,7 @@ func NewSender(port int, filepath string) *Sender {
if err != nil { if err != nil {
panic(err) panic(err)
} }
incomingPacketsChan := make(chan protocol.Packet, 5000) incomingPacketsChan := make(chan protocol.Packet, 100)
remoteIP, err := GetRemoteIP() remoteIP, err := GetRemoteIP()
if err != nil { if err != nil {

Loading…
Cancel
Save