介绍

MCSMT是一个文件更新软件,它能使客户端的文件与服务端同步。

声明:本教程为作者本人发布。官方仓库:PsBash-Team/MCSMT: File updater. (github.com)

建议先阅读项目README.md,中文的,很详细。目前 mcsmt-dev-v3分支已经和main分支合并。

目前Version3已经进入稳定状态。这代表——在我的使用范围,它没有Bug或者很少有Bug。因此,这个项目不是被抛弃了,亦或者停更了之类的,只是没有IDEA来维持更新了。如果您有好主意,欢迎在Issues · PsBash-Team/MCSMT (github.com)提出来。或者bug也行。

关于安全性问题

关于HTTPS请求证书未验证的问题

本项目纯属个人需求。因此在使用范围这么小的情况下,我没有兴趣自己建立一个协议,比如TCP上层协议之类的,也没有兴趣魔改Python的HTTP客户端来兼容一个我自己都不知道能不能用得上的功能。所以,基于以上所有原因,如果您在客户端配置文件中指定了ip, ips, preferIPType亦或useDNS字段时,若没有启用wget-extension,所有HTTPS请求均没有校验证书。具体原因见此处。

关于可能遭受到的恶意骇入问题

这是一个被忽略的严重安全漏洞。我会在下次更新的时候修复它,如果您需要使用旧版本也可简单的在

上图中红色横线所在的地方插入一行(记得缩进到和下一行一样的位置):

即可解决。

致从老版本迁移的用户

我们建议所有旧版本用户及时更新客户端/服务端。本教程仅介绍最新的v3-0.2.12.1版本

安装

确保在开始之前准备好Python3环境。参考这篇文章,记得安装pip包管理器。

运行下面命令:

最新版MCSMT 3.0.2.12.1已发布在TestPyPI。

等待命令跑完即可出现类似下方输出即可(因为我已经安装过所以和新安装有一点不同)

出现最后一行(新安装会有更多包名)就代表成功安装上了,此时就可以使用了。

使用

具体参数参考此处。

服务端简单使用

创建一个目录,包含你需要同步的文件。

# Linux / MacOS
python3 -m mcsmt.server.genconf
# Windows
py -3 -m mcsmt.server.genconf
# Windows Portable
path\to\python.exe -m mcsmt.server.genconf

使用便捷配置生成器,快速生成服务器配置。或者,手动配置教程参考此处。

# Linux / MacOS
python3 -m mcsmt.server.gen
# Windows
py -3 -m mcsmt.server.gen
# Windows Portable
path\to\python.exe -m mcsmt.server.gen

快速生成一份客户端索引文件,此时有两个选择:直接把当前目录上传服务端,或者在当前服务器启用动态服务端。

启用动态服务端

首先启动WatchDog服务,这会监听当前文件夹的指定目录并自动重建索引。

# Linux / MacOS
python3 -m mcsmt.server.wdgen -d <ResourceDirectory>
# Windows
py -3 -m mcsmt.server.wdgen -d <ResourceDirectory>
# Windows Portable
path\to\python.exe -m mcsmt.server.wdgen -d <ResourceDirectory>

注:ResourceDirectory不应该为.

然后启动HTTP服务器

# Linux / MacOS
python3 -m http.server [port]
# Windows
py -3 -m http.server [port]
# Windows Portable
path\to\python.exe -m http.server [port]

port默认为80

客户端简单使用

客户端一般是由您发布给客户的,因此如果您是客户,您无需阅读本文章,仅需要求服务商提供配置文件即可。

首先,您需要创建一个文件夹,并进入其中。

创建一个Cconfig.json(或者其他文件名),其格式如下:

{
  "requestURL": "http://api.mcsmt.example.com/",
  "ip": "xxx.xxx.xxx.xxx",
  "ips": ["xxx.xxx.xxx.xxx","yyy.yyy.yyy.yyy"],
  "preferIPType: "A",
  "dns": "223.5.5.5",
  "useDNS": true
}

requestURL字段应为str类型,应为您部署MCSMT服务端的地址

ip字段应为str类型,定义了你想要让requestURL字段中的域名解析到的地址,这可以用于防范DNS劫持、让您的服务使用不属于您的域名用于免流、避免审查等用途。

ips字段应为list类型,包含的所有数据都应为str类型,相当于ip字段的负载均衡版,客户端每次启动都会从该字段随机抽取一个数据作为ip字段的值。

preferIPType字段应为str类型,可用的值有"A""AAAA",当该字段存在时,将调用内置DoH解析器解析requestURL字段内域名,并把所有符合该字段的结果作为ips字段的数据。特殊情况:当安装了WGET-EXTENSION时,将使用WGET-EXTENSION的参数替代。

dns字段应为str类型,定义了内置DoH解析器所使用的DoH服务器。

useDNS字段应为bool类型,当其值为真,即便preferIPType字段不存在,也使用内置DoH解析器解析。默认的偏好记录类型是A。特殊情况:即便安装了WGET-EXTENSION也使用内置DoH解析器解析。

ipipspreferIPTypeuseDNS字段的优先级如下:

ip>ips>preferIPTypeuseDNS

如果已有更高优先级的字段定义,则会忽略较低优先级的字段。

然后运行以下命令即可根据服务器上的索引文件更新。

# Linux / MacOS
python3 -m mcsmt client main client_config_file_path:<ConfigFileName> client_config_encoding:<ConfigFileEncoding>
# Windows
py -3 -m mcsmt client main client_config_file_path:<ConfigFileName> client_config_encoding:<ConfigFileEncoding>
# Windows Portable
path\to\python.exe -m mcsmt client main client_config_file_path:<ConfigFileName> client_config_encoding:<ConfigFileEncoding>

ConfigFileName应为您刚才创建的配置文件的文件名(如果不使用此参数默认为当前目录的Cconfig.json

ConfigFileEncoding应为您刚才创建的配置文件的编码(如果不使用此参数默认为UTF-8

杂项使用

EasyDNS DoH 客户端

简单的DoH客户端。

使用方式:

# Linux / MacOS
python3 -m mcsmt mixed ezdns name:<domain> type:<recordType> ns:<Nameserver>
# Windows
py -3 -m mcsmt mixed ezdns name:<domain> type:<recordType> ns:<Nameserver>
# Windows Portable
path\to\python.exe -m mcsmt mixed ezdns name:<domain> type:<recordType> ns:<Nameserver>

domain应为您要查询的域名,必填

recordType应为您要查询的记录类型

Nameserver应为您查询使用的DoH服务器

下载器

简单的HTTP下载器,可以搭配WGET-EXTENSION,即GNU Wget。是MCSMT主程序使用的下载程序,也是MCSMT Project里逻辑最复杂的程序。

使用方法:

# Linux / MacOS
python3 -m mcsmt mixed down download_url:<url> target_path:<directory> ip:<ip> sha512hex:<sha512checksum> preferIPType:<recordType> dns:<nameserver> use_dns:<use>
# Windows
py -3 -m mcsmt mixed down download_url:<url> target_path:<directory> ip:<ip> sha512hex:<sha512checksum> preferIPType:<recordType> dns:<nameserver> use_dns:<use>
# Windows Portable
path\to\python.exe -m mcsmt mixed down download_url:<url> target_path:<directory> ip:<ip> sha512hex:<sha512checksum> preferIPType:<recordType> dns:<nameserver> use_dns:<use>

url应为您要下载的文件的直链地址

directory应为您要下载到的文件夹

ip应为您需要令url中的域名解析到的IP地址

sha512checksum应为您要下载的文件的SHA512哈希值

recordType应为您需要的DNS记录类型,有效值为AAAAA。关于此项的更多解释,请参考此处

dns应为您希望使用的DoH服务器

use应为您是否需要使用内置DoH解析器,有效值为truefalse。关于此项的更多解释,请参考此处

未完待续

目前本篇文章的很多内容还需要进一步完善。更多内容敬请期待。