缘起
这个项目是上学期学完计网后写着玩儿的,一开始只是想用python进行TCP连接同时进行抓包测试;由于我有两台PC,而苦于两台电脑间的文件传输、同步问题;自己搭过SFTP服务器,用过Resilio Sync
,Syncthing
等文件传输、同步工具;由于自己喜欢“小而美”的软件,对软件的性能、效率、资源占用等要求极高,同时使用的笔记本续航有限,不允许有太多的后台进程,所以有了顺便开发一个文件传输脚本的想法。
一开始的功能很简单,只能单次传输单个文件,后来添加了传输文件夹,并做了一些程序代码优化;在回到学校后,我在两台电脑上进行测试,发现并解决了数据粘包的问题(用了一个while循环);我又担心传输过程中的文件是否损坏的问题,于是加上了实时计算校验MD5(虽然MD5不那么安全,但用于单次文件传输却是极好,不仅计算快,而且散列分布很好)的功能;当我把的PC连接校园网的时候,我担心校园网不安全,可能会被数据抓包,于是又加上了安全套接字层(SSL)。
有一次传输大量文件的时候电脑休眠了,导致又必须重新传输一遍文件,不仅浪费带宽(虽然局域网下没什么),而且还浪费时间,于是就有了类似断点重传的功能。后来又顺便重构了一下代码,添加了比较系统信息、网速测试、文件夹比较(传输完毕后比较一下两个文件夹的内容是否相同比较放心)、命令远程执行等功能。 这两天突然发现这个小小的程序不知不觉已经有了这么多功能,于是就将其进行开源分享。下面是该程序的Readme,文末有仓库地址。
简介
File Transfer Tools
包含FTS (File Transfer Server)
,FTC (File Transfer Client)
两个组件,是轻量、快速、安全、多功能的跨设备文件传输脚本。
功能
- 文件传输
- 可传输单个文件或者整个文件夹
- 安全性保障:可以使用加密传输(使用安全套接字层协议)、也可以明文传输
- 正确性保障:通过Hash值校验文件的一致性,判断文件夹内所有文件是否都正确传输
- 进度条显示:实时显示文件传输进度、当前网络速率、剩余传输时长
- 同名文件新命名传输、避免重复传输、覆盖传输三种方式
- 命令行,可以便捷地在远端执行命令并实时返回结果,类似ssh
- 自动寻找服务主机,也可手动指定连接主机
- 文件夹比较,可显示两个文件夹中的文件的相同、差异等信息
- 查看客户端与服务端系统状态、信息
- 实时输出日志到控制台和文件中,并且可以自动整理压缩日志文件
- 便捷测试客户端与服务器之间的网络带宽
- 可以为服务器设置连接密码,增强安全性
- 便捷同步客户端和服务器的剪切板内容
特点
- 启动、运行、响应速度快
- 采用最小默认配置原则,即开即用,也可以方便地自己修改配置
- 可在局域网、公网等任意网络环境下使用,只要两台主机可以进行网络连接即可
- 多线程传输,传输速度快,实测可以跑满1000Mbps带宽,由于设备限制,没有测试更高带宽
- 运行时内存占用小,采用懒加载模式,确保对资源的最小占用
- 即用即开,即关即走,关闭程序后不会残留进程
- 目前适配Windows和Linux平台
如何选择
- 如果你想要功能更强大的文件传输服务,请选择FTP服务器、客户端(如
FileZilla
、WinSCP
等) - 如果你想要稳定的文件同步和共享,推荐使用
Resilio Sync
、Syncthing
等 - 如果你只是偶尔传输文件/不喜欢上述服务的后台存留、资源占用/不需要那么强大的服务/想要自己定制功能那请选择
File Transfer Tools
安装与运行
FTS
默认占用2023,2021端口,FTC默认占用2022端口。其中2023端口作为FTS
的TCP侦听端口,2021、2022作为服务器和客户端之间UDP传输接口。
你可以在本文末尾查看详细配置信息并修改上述配置。
下载可执行程序
- 点击右侧
Release
- 下载
File Transfer Tools.zip
- 解压文件夹,双击
FTC.exe
或者FTS.exe
即可运行 - 或者在终端中运行程序以使用程序参数,例如
.\FTC.exe [-h] [-t thread] [-host host] [-p]
使用Python解释器运行
- 将源代码克隆到你的项目位置
- 使用
pip install -r requirements.txt
安装所有依赖项 - 使用你的python解释器执行脚本
快捷执行方法
以Windows为例,你可以将FTS、FTC的运行命令分别编写为批处理文件,然后将批处理文件的目录添加到你的环境变量中,这样你就可以通过简单的在命令行中键入FTS
、FTC
来使用默认的、最简单的命令来运行程序了。
例如,你可以将下面命令写入文件FTS.bat
中
|
|
将下面命令写入文件FTC.bat
中
|
|
然后,将批处理文件夹添加到你的环境变量中,最后在你的终端中键入以下命令就可以快捷运行代码了
|
|
以上批处理文件中,%1~%9
表示程序传入的参数(%0
表示当前路径)
注意,终端的默认工作路径为用户目录(~),如需修改配置文件,请到该目录下修改。
用法
FTC
FTC是客户端,用于发送文件和指令。
|
|
参数说明
-t
: 指定线程数,默认为逻辑处理器数量。
-host
: 显式指定服务器主机名(可使用hostname或ip)及端口号(可选),不使用此选项时,客户端自动寻找同一子网下的服务器
-p
: 显式指定服务器的连接密码(默认情况下服务器没有密码)。
--plaintext
: 显式指定明文传输数据,需要服务器也使用明文传输。
命令说明
正常连接后,输入指令
- 输入文件(夹)路径,则会发送文件(夹)
- 输入
sysinfo
,则会显示双方的系统信息 - 输入
speedtest n
,则会测试网速,其中n为本次测试的数据量,单位MB。注意,在计算机网络中,1 GB = 1000 MB = 1000000 KB. - 输入
compare local_dir dest_dir
来比较本机文件夹和服务器文件夹中文件的差别。 - 输入
clip pull/push
或clip get/send
来同步客户端和服务器的剪切板内容 - 输入其他内容时作为指令让服务器执行,并且实时返回结果。
运行截图
以下均为运行在同一台主机上的截图。
程序启动
传输文件
执行命令:sysinfo
执行命令:speedtest
执行命令:compare
执行命令:clip
执行命令行命令
FTS
FTS
是服务器端,用于接收并存储文件,执行客户端发来的指令。
|
|
参数说明
-d, --dest
: 显式指定文件接收位置,默认为配置项"平台_default_path"的值(Windows平台默认为桌面)。
-p, --password
: 为服务器设置一个密码,防止恶意连接。
--plaintext
: 显式指定数据明文传输,默认使用ssl加密传输。
--avoid
:开启时,如果目录下已经有同名文件,分两种情况,若接收端的文件大小大于等于发送端则阻止该文件的传输,否则接收并覆写该文件;此功能主要用于一次传输大量文件被中断后的重传,类似断点重传,其他情况请谨慎使用。未开启时,如果存在的文件名为a.txt
,则传输过来的文件会按照 a (1).txt
、a (2).txt
依次命名。
运行截图
配置
配置项在配置文件config.txt
中,当配置文件不存在时,程序会自动创建默认的配置文件
Main 程序的主要配置
windows_default_path
: Windows平台下默认的文件接收位置
linux_default_path
: Linux平台下默认的文件接收位置
cert_dir
: 证书文件的存放位置
Log 日志相关配置
windows_log_dir
: Windows平台下默认的日志文件存放位置
linux_log_dir
: Linux平台下默认的日志文件存放位置
log_file_archive_count
: 当日志文件数超过该大小时归档
log_file_archive_size
: 当日志文件的总大小(字节)超过该大小时归档
Port 配置端口相关内容
server_port
:服务器 TCP 侦听端口
server_signal_port
:服务器 UDP 侦听端口
client_signal_port
:客户端 UDP 侦听端口