A multi-threaded file transfer tool over SSH. The goal is to replace SCP.
Project description
FastCopy
基于 SSH 协议的多线程文件传输工具。
目标是用来替换 scp
和 rsync
。
特点
- 文件切块处理,并行传输,速度更快
- 支持使用 文件名通配符 及 正则表达式 来匹配需要传输的文件
- 自动跳过本地与远程相同内容的文件
- 自动保持 发送端 与 接收端 文件权限完全相同
- 支持 SSH Config
- 支持 SSH Agent
TODO
- 断点续传支持
- 改进配置管理方式
- 握手时确认会话参数,取消全局变量方式
- 版本前后兼容
- 编写测试用例
- 保持软链接
安装
使用前须在 服务器 和 本地 同时安装本程序。
pip install fastcopy
使用
-
服务器
运行前首先确保服务端的 7523 端口未被占用
fcpd -d
-
本地
报文设计
所有数据包均采用大端字节序
1. 报文统一格式
flag | chksum | length | payload |
---|---|---|---|
1 Bytes | 4 Bytes | 2 Bytes | ... |
2. 报文类型
- 推送申请:
0x1
- 拉取申请:
0x2
- 建立会话:
0x3
- 后续连接:
0x4
- 传输模式:
0x5
- 目录信息:
0x6
- 文件信息:
0x7
- 文件数量:
0x8
- 文件就绪:
0x9
- 数据传输:
0xa
- 传输完成:
0xb
- 异常退出:
0xc
3. 报文详情
-
数据请求
连接建立后,客户端首先需要向服务器申请 拉取 或 推送,并将 目的路径 传给服务器
-
拉取、推送的标识由
flag
字段决定 -
方向: Client -> Server
-
Payload 格式为:
connection info json string
-
-
建立会话
服务器收到第一步的申请后,会产生一个 SessionID,并回传给客户端,客户端需要在自己本地保存
-
方向: Server -> Client
-
Payload 格式为:
session_id 16 Bytes
-
-
后续连接
客户端后续与服务器建立的并发连接,第一个报文须告诉服务器 SessionID
-
方向: Client -> Server
-
Payload 格式为:
session_id 16 Bytes
-
-
文件总量
连接就绪后,发送端需告知接收端文件总量
-
Payload 长度 4 字节,所以最大允许传输文件数量为 4,294,967,296
-
方向: Sender -> Receiver
-
Payload 格式:
n_files 4 Bytes
-
-
文件信息
文件发送发需将每一个文件的信息告知接收端。 包括文件的编号、权限、大小、创建时间、修改时间、访问时间、校验和、路径。 其中路径为相对路径。
-
方向: Sender -> Receiver
-
Payload 格式:
file_id perm size mtime chksum path 4 Bytes 2 Bytes 8 Bytes 8 Bytes 16 Bytes ...
-
-
接收端文件准备就绪
接收端收到文件信息后,需将文件信息记录起来,并在本地创建同样大小的空文件
-
方向: Receiver -> Sender
-
Payload 格式:
file_id 4 Bytes
-
-
文件数据块传输报文
Chunk Sequence 占用 4 字节,所以支持的单个文件最大为: 4 GB * ChunkSize
-
方向: Sender -> Receiver
-
Payload 格式:
file_id seq data 4 Bytes 4 Bytes ...
-
4. 握手过程
序号 | 客户端 | 服务器 |
---|---|---|
1 | 客户端启动 | 服务端启动 |
2 | 等待客户端连接 | |
3 | 发起连接请求 | |
4 | 接收客户端连接 | |
5 | 等待客户端请求 (请求超时则断开) | |
6 | 发送 PUSH 或 PULL 请求 |
|
7 | 产生 SessionID | |
8 | 将 SessionID 传回客户端 | |
9 | 接收 SessionID 并保存 | |
10 | 循环创建多个并行连接 | |
11 | 新连接携带 SessionID 逐一发送ATTACH 请求 |
|
12 | 确认 SessionID 无误 | |
13 | 将新连接添加至对应 Session 的连接池 |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fastcopy-0.1.8.tar.gz
.
File metadata
- Download URL: fastcopy-0.1.8.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5d91481229654422e848a11afe3d9a3c10e48f91c43f9c89efa5132f53457dc |
|
MD5 | 9cf464d61fcc87591d7a6ebda3b2f0fc |
|
BLAKE2b-256 | 415114689c215dbb33ace3e4e584a4a449fb0dd58a5a7e1272aebcd80a11fe7a |
File details
Details for the file fastcopy-0.1.8-py2.py3-none-any.whl
.
File metadata
- Download URL: fastcopy-0.1.8-py2.py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d19c6ff512a05c5a3e95dbc6849ebbb4985d80060d3e394a81caaa569d9f01e |
|
MD5 | 045a74b1215566de023a3a2641763a5e |
|
BLAKE2b-256 | 977b8c8aa0d79b0edab91d96b5e082e545b1b4ab2735eb7a854f593f0fbe7808 |