Teleport is a simple application for sending files from Point A to Point B

Related tags

Utilities teleport
Overview

Teleporter

Teleporter is a small utility in the vein of netcat to send files quickly from point A to point B. It is more convenient than netcat in that you don't have to run a separate command with file redirection for each file you wish to transfer.

Teleporter lets you pass the destination and a list of files you wish to send and it will create those files with the proper filenames on the receiving end. Each Teleporter binary can act as a client or a server so there's no need to move multiple software packages around.

Teleporter can recursively copy files as well, just pass a directory name and it will copy files all the way down.

Teleporter now does delta file transfers using the Blake3 hashing algorithm for files being overwritten.

The protocol Teleporter implements to transfer files is called Teleport.

Usage

Teleporter is a simple application for sending files from Point A to Point B

USAGE:
    teleporter [FLAGS] [OPTIONS]

FLAGS:
    -h, --help         Prints help information
    -o, --overwrite    Overwrite remote file
    -r, --recursive    Recurse into directories on send
    -V, --version      Prints version information

OPTIONS:
    -d, --dest <dest>         Destination teleporter IP address [default: 127.0.0.1]
    -i, --input <input>...    List of filepaths to files that will be teleportered [default: ]
    -p, --port <port>         Destination teleporter Port, or Port to listen on [default: 9001]

To start a teleporter in server (receiving) mode, just run:

./teleporter

or

cargo run

Teleporter will default to listening on 0.0.0.0:9001 for incoming connections.

To start a teleporter in client (sending) mode, run:

./teleporter -d <destination IP> -i <file> [[file2] [file3] ...]

Teleporter will transfer files with their name information as well as their file permissions. Any file path information will be lost. All the received files will be written out in the CWD where the server side was started.

Installation

If you have Rust and Cargo installed, Teleporter can be quickly compiled and installed by running the following command:

cargo install teleporter

This will install Teleporter to ~/.cargo/bin/teleporter, which might need to be added to your shell's PATH variable.

Example output

Server (receiving from 2 different clients)

$ target/debug/teleporter
Teleporter Server listening for connections on 0.0.0.0:9001
Receiving: ["testfile", "otherfile", "testfile2", "testfile3"] => Received file: testfile2 from: 127.0.0.1:41330
Receiving: ["testfile", "otherfile", "testfile3", "testfile4"] => Received file: testfile3 from: 127.0.0.1:41332
Receiving: ["testfile", "otherfile", "testfile4"] => Received file: testfile from: 127.0.0.1:41326
Receiving: ["otherfile", "testfile4", "testfile5"] => Received file: testfile5 from: 127.0.0.1:41336
Receiving: ["otherfile", "testfile4", "testfileB"] => Received file: testfile4 from: 127.0.0.1:41334
Receiving: ["otherfile", "testfileB"] => Received file: testfileB from: 127.0.0.1:41340
Receiving: ["otherfile", "testfileC"]

Client (sending)

$ target/debug/teleporter -i ./test/testfile ./test/testfile2 ./test/testfile3 ./test/testfile4
Teleporter Client
Sending file 1/4: "testfile"
 =>    2.000G of    2.000G (100.00%) done!
Sending file 2/4: "testfile2"
 =>    4.000M of    4.000M (100.00%) done!
Sending file 3/4: "testfile3"
 =>    4.000M of    4.000M (100.00%) done!
Sending file 4/4: "testfile4"
 =>   20.000M of   20.000M (100.00%) done!

Comments
  • Dramatic increase in time for hashing (delta overwrite) on MacOS

    Dramatic increase in time for hashing (delta overwrite) on MacOS

    Perform some binary profiling to determine exact case of slowdown.

    Affected versions: v0.6.0, v0.5.5, suspect the following culprits:

    • blake3 on MacOS or M1
    • MacOS caching

    Ex Linux machine orig:

     =>  666.433M of  666.433M (100.00%) done! Time: 37.06s Speed: 144.094 Mbps
    

    Linux machine delta overwrite:

     done! Time: 1.18s Speed: 3530.437 Mbps
    

    Ex MacOS machine (M1Max) orig:

     =>    1.145G of    1.145G (100.00%) done! Time: 19.52s Speed: 493.502 Mbps
    

    MacOS machine (M1Max) delta overwrite:

     done! Time: 84.77s Speed: 111.626 Mbps
    
    bug 
    opened by genonullfree 5
  • File transfer not working

    File transfer not working

    Version: 0.5.3.0

    Sending an 82 byte file (no overwrite) created an empty file on the server. Data appeared to be transferred according to the client output:

    Sending file 1/1: "file"
     =>    82.000B of   82.000B (100.00%) done!
    

    82 byte file on the server is just all zeroes. Documenting this for future investigation

    opened by ivlzme 4
  • Add confirmation on file transfer overwrite options

    Add confirmation on file transfer overwrite options

    Options:

    1. Add a flag -c to confirm every file that will be overwritten with "y/n" inputs
    2. Add a flag -y to assume "yes" to overwrite confirmation input

    I'm leaning towards 2, because it feels more correct/safe, but 1 keeps the current behavior.

    enhancement good first issue low priority 
    opened by genonullfree 4
  • add instructions for cross compiling

    add instructions for cross compiling

    Add instructions for offline cross-compiling to various architectures. At least supporting:

    • x86
    • aarch64
    • arm32
    • mips

    With either being able to support various glibc versions or static musl builds.

    opened by genonullfree 3
  • Add crypto as an option

    Add crypto as an option

    Bring back ECDH crypto! (optionally) Add flag -e option to exchange elliptic curve public keys and encrypt the file transfer. The ecdh branch may yet be of some use to us.

    enhancement 
    opened by genonullfree 3
  • Bump msrv to 1.56

    Bump msrv to 1.56

    This allows removal of std::convert::{TryFrom, TryInfo} since they are included in the std::prelude.

    Notice that they will receive the following error if not using =>1.56:

    > cargo +1.55.0-x86_64-unknown-linux-gnu b
    error: failed to parse manifest at `/home/wcampbell/projects/wcampbell/code/teleport/Cargo.toml`
    
    Caused by:
      feature `edition2021` is required
    
      The package requires the Cargo feature called `edition2021`, but that feature is not stabilized in this version of Cargo (1.55.0 (32da73ab1 2021-08-23)).
    
      Consider trying a newer version of Cargo (this may require the nightly release).
      See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-2021 for more information about the status of this feature.
    

    But the future is here!

    opened by wcampbell0x2a 3
  • Remove unmaintained rust-crypto library

    Remove unmaintained rust-crypto library

    output running cargo audit on this library:

    > cargo audit
        Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
          Loaded 374 security advisories (from /home/wcampbell/.cargo/advisory-db)
        Updating crates.io index
        Scanning Cargo.lock for vulnerabilities (56 crate dependencies)
    Crate:         time
    Version:       0.1.44
    Title:         Potential segfault in the time crate
    Date:          2020-11-18
    ID:            RUSTSEC-2020-0071
    URL:           https://rustsec.org/advisories/RUSTSEC-2020-0071
    Solution:      Upgrade to >=0.2.23
    Dependency tree:
    time 0.1.44
    └── rust-crypto 0.2.36
        └── teleporter 0.7.0
    
    Crate:         rust-crypto
    Version:       0.2.36
    Warning:       unmaintained
    Title:         rust-crypto is unmaintained; switch to a modern alternative
    Date:          2016-09-06
    ID:            RUSTSEC-2016-0005
    URL:           https://rustsec.org/advisories/RUSTSEC-2016-0005
    Dependency tree:
    rust-crypto 0.2.36
    └── teleporter 0.7.0
    
    error: 1 vulnerability found!
    warning: 1 allowed warning found
    
    > git show HEAD
    commit 288f97e743f385c1e3f555bd3a0a18f9014d6939 (HEAD -> main, origin/main, origin/HEAD)
    

    This leads to the following recommendation: https://rustsec.org/advisories/RUSTSEC-2016-0005

    Sorry for being bored late at night ;)

    opened by wcampbell0x2a 2
  • Choose an open source license

    Choose an open source license

    Please consider assigning a license to this project.

    https://choosealicense.com/no-permission/

    If you find software that doesn’t have a license, that generally means you have no permission from the creators of the software to use, modify, or share the software. Although a code host such as GitHub may allow you to view and fork the code, this does not imply that you are permitted to use, modify, or share the software for any purpose.

    I tend to prefer the MIT License as it is simple and permissive. It also expressly excludes any warranty.

    opened by JonathonReinhart 2
  • Set max chunk size

    Set max chunk size

    Set the maximum chunk size to be 4GB for delta chunks and file transfers. Realistically it will not get this large unless there is a crazy huge file transfer going on anyway.

    Check that the length values are within the bounds of the fields we are sending in.

    opened by genonullfree 1
  • Protocol `chunk_size` vs TeleportData `length` value

    Protocol `chunk_size` vs TeleportData `length` value

    The protocol chunk_size is u64, while the TeleportData length value is u32. There could be an issue in the current implementation because we assume each TeleportData is one chunk of data when doing delta transfers.

    Reported by @aedrax

    opened by genonullfree 1
  • Allow sending files to destinations with absolute paths

    Allow sending files to destinations with absolute paths

    My use case for teleport is going to be using it programmatically for some system testing-

    It would be really nice to be able to keep the preceding slash e.g. /tmp/file when transferring something, as I have some files that may use local paths from the testing directory, and some files that use absolute paths for some configuration changes.

    Essentially, would it be possible to find a way to allow absolute path transfers without needing a command-line flag?

    enhancement good first issue 
    opened by GreenMobius 1
Releases(v0.10.1)
Owner
geno
geno
The point of this anchor project is to serve as a starter kit or example to compose with mango-v3 using anchor.

The point of this anchor project is to serve as a starter kit or example to compose with mango-v3 using anchor. It currently provides 2 examples and various inline todos on how to extend this.

null 26 Oct 10, 2022
Select any exported function in a dll as the new dll's entry point.

Description This tool will patch the entry point of the input dll and replace it with the RVA of another exported function in that same dll. This allo

Kurosh Dabbagh Escalante 43 Jun 7, 2023
The schelling point for ZK applications.

succinctx The schelling point for ZK applications. Installing Open your terminal and run the following command: curl -L https://cli.succinct.xyz | bas

Succinct 20 Sep 5, 2023
Czkawka is a simple, fast and easy to use app to remove unnecessary files from your computer.

Multi functional app to find duplicates, empty folders, similar images etc.

Rafał Mikrut 9.2k Jan 4, 2023
A Command Line OTP Authenticator application.

cloak A Command Line OTP (One Time Password) Authenticator application written in Rust that generates time-based and counter-based OTP codes. Motivati

Evans Murithi 205 Jan 5, 2023
Hydrogen is the desktop application for Geplauder, built with tauri studio.

Hydrogen Hydrogen is the desktop application for Geplauder, built with tauri studio. For more information on Geplauder, click here. Usage To configure

null 4 Nov 21, 2021
This plugin provides an interface for storing unencrypted values on the application cache folder.

Tauri Plugin Store This plugin provides an interface for storing unencrypted values on the application cache folder. Architecture This repo shape migh

Tauri 128 Jan 1, 2023
Measure the execution time of an application

Execution Timer Drag an executable file on the binary or enter the path as an argument to measure the execution time of the program. Building cargo bu

Flux Industries 2 Nov 16, 2021
A Rust-based tool to analyze an application's heap.

Heap analysis tool for Rust Heap analysis is a pure-Rust implementation to track memory allocations on the heap. Usage Heap analysis provides a custom

Moritz Hoffmann 8 May 9, 2022
A shared document application akin to Google Docs. Example usage of wasm-peers library.

Live Document Proof of concept application showcasing the usability of wasm-peers crate for easy and costless peer-2-peer WebRTC communication. It's a

null 6 Sep 19, 2022
lipsum-cli is a small terminal application written in Rust language.

lipsum-cli is a small terminal application written in Rust language. It's used for generating pseudo-Latin lorem ipsum filler text in terminal.

Civan Yavuzşen 5 Nov 28, 2022
messloc is a drop in replacement for malloc that can transparently recover from memory fragmentation without any changes to application code.

messloc is a drop in replacement for malloc that can transparently recover from memory fragmentation without any changes to application code. Goals Al

null 11 Dec 10, 2022
🔮 ChatGPT Desktop Application (Mac, Windows and Linux)

ChatGPT ChatGPT Desktop Application ?? Install ?? Update Log ?? History versions... Windows From our github releases: ChatGPT_0.7.4_x64_en-US.msi Or i

lencx 3.8k Jan 6, 2023
A self-contained, single-binary Rust and Leptos application for remote Wake-on-LAN

Remote Wake-on-LAN with Rust and Leptos A self-contained, single-binary Rust and Leptos application serving a web interface to wake another device on

Valentin Bersier 6 Jan 28, 2023
NewBin Desktop Application (Mac, Windows and Linux)

NewBing NewBing Desktop Application (Windows Mac Linux) Install Windows NewBing_0.0.1_x64_en-US.msi Mac NewBing_0.0.1_x64.dmg Usage Recommended Rust (

珠峰架构 23 Feb 19, 2023
Bolt is a desktop application that is designed to make the process of developing and testing APIs easier and more efficient.

Bolt ⚡ Bolt is a desktop application that is designed to make the process of developing and testing APIs easier and more efficient. Quick start ??‍??

0xHiro 6 Mar 26, 2023
A lightweight new Bing (AI chat) desktop application which based on Tauri.

Bing Lite A lightweight new Bing (AI chat) desktop application which based on Tauri. No more Microsoft Edge, no more Chromium/Electron! Download The l

a.e. 6 Apr 5, 2023
A W.I.P desktop application for a new typesetting language, typst.

[WIP] typstudio A W.I.P desktop application for a new markup-based typesetting language, typst. Typstudio is built using Tauri. Features Syntax highli

Cubxity 40 Apr 25, 2023
KFtray - A tray application that manages port forwarding in Kubernetes.

Ktray is written in Rust and React, with Tauri framework. The app simplifies the process of starting and stopping multiple port forwarding configurations through a user-friendly interface.

Henrique Cavarsan 42 Dec 17, 2023