mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-12-22 10:08:15 -05:00
Remove specs in favor of wiki
This commit is contained in:
parent
1a7fbd6d1b
commit
a04cfb726d
@ -1,12 +0,0 @@
|
||||
# V2Ray 性能
|
||||
|
||||
## 主机测试
|
||||
|
||||
| 测试时间 | 主机商/类型 | 地区 | 主机 CPU | 主机内存 | 主机系统 | Youtube 速度 | 内存 (单用户) | CPU (单用户) |
|
||||
| -----------|------------------ | ----- |------- | ------- | ------ | ------- | ----------- | ----------- |
|
||||
| 2015.09.30 | Vultr | 跨洲 | 1 Core | 1024 MB | Debian 64 位 | >4 Mbps | ~10M | < 2% |
|
||||
| 2015.09.30 | Vultr | 同洲 | 1 Core | 768 MB | Ubuntu 32 位 | >20 Mbps | ~11M | < 20% |
|
||||
| 2015.09.29 | 搬瓦工 Bandwagon 10G | 同洲 | 1 Core | 256 MB | Cent OS 32 位 (OpenVZ) | >4 Mbps | ~8M | < 5% |
|
||||
| 2015.09.27 | GCE f1-micro | 跨州 | 1 Core | 600 MB | Debian 64 位 | >4 Mbps | ~9M | < 2% |
|
||||
|
||||
以上测试仅作为参考,具体连接速度可能受到各种因素的影响。
|
@ -1,10 +0,0 @@
|
||||
# V2Ray 设计概要
|
||||
|
||||
## 目标
|
||||
* V2Ray 自身提供基础的翻墙功能,单独使用可满足日常需求;
|
||||
* V2Ray 可被用于二次开发,可为用户提供个性化的翻墙体验,从而也达到难以统一屏蔽之效果;
|
||||
* V2Ray 为模块化设计,模块之间互相独立。每个模块可单独使用,也可和其它模块搭配使用。
|
||||
|
||||
## 架构
|
||||
|
||||
![](https://github.com/V2Ray/v2ray-core/blob/master/spec/v2ray_design.png)
|
@ -1,49 +0,0 @@
|
||||
# 开发指引
|
||||
|
||||
## 基本
|
||||
### 版本控制
|
||||
Git
|
||||
|
||||
### Branch
|
||||
本项目只使用一个 Branch:master。所有更改全部提交进 master,并确保 master 在任一时刻都是可编译可使用的。
|
||||
|
||||
### 引用其它项目
|
||||
* golang
|
||||
* 产品代码只能使用 golang 的标准库,即名称不包含任何网址的包;
|
||||
* 测试代码可以使用 golang.org/x/... ;
|
||||
* 如需引用其它项目请事先创建 Issue 讨论;
|
||||
* 其它
|
||||
* 只要不违反双方的协议(本项目为 MIT),且对项目有帮助的工具,都可以使用。
|
||||
|
||||
|
||||
## 开发流程
|
||||
|
||||
### 写代码之前
|
||||
发现任何问题,或对项目有任何想法,请立即[创建 Issue](https://github.com/V2Ray/v2ray-core/blob/master/spec/issue.md) 讨论之,以减少重复劳动和消耗在代码上的时间。
|
||||
|
||||
### 修改代码
|
||||
* golang
|
||||
* 请参考 [Effective Go](https://golang.org/doc/effective_go.html);
|
||||
* 每一次 commit 之前请运行: gofmt -w github.com/v2ray/v2ray-core/
|
||||
* 每一次 commit 之前请确保测试通过: go test github.com/v2ray/v2ray-core/...
|
||||
* 提交 PR 之前请确保新增代码有超过 60% 的代码覆盖率(code coverage)。
|
||||
* 其它
|
||||
* 请注意代码的可读性
|
||||
|
||||
### Pull Request
|
||||
提交 PR 之前请先运行 git pull 以确保 merge 可顺利进行。
|
||||
|
||||
## 对代码的修改
|
||||
### 功能性问题
|
||||
请提交至少一个测试用例(test case)来验证对现有功能的改动。
|
||||
|
||||
### 性能相关
|
||||
请提交必要的测试数据来证明现有代码的性能缺陷,或是新增代码的性能提升。
|
||||
|
||||
### 新功能
|
||||
如果新增功能对已有功能不影响,请提供可以开启/关闭的开关(如 flag),并使新功能保持默认关闭的状态。
|
||||
|
||||
### 其它
|
||||
视具体情况而定。
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
# 资助 V2Ray 发展
|
||||
|
||||
## 资助方式
|
||||
V2Ray 支持以下资助方式,收到捐赠之后您的昵称将会显示在页面下方。更改昵称请联系 donate@v2ray.com 。
|
||||
|
||||
### 礼品卡
|
||||
请发送礼品卡编码至 donate@v2ray.com
|
||||
* [Amazon Gift Card](https://www.amazon.com/gp/product/B004LLIKVU/gcrnsts?ie=UTF8&qid=1443538350&ref_=lp_2238192011_1_1&s=gift-cards&sr=1-1)
|
||||
* iTunes Gift Card
|
||||
|
||||
|
||||
## 感谢您的帮助
|
||||
* 2015.10.17: Penn G\*\*\*\*\*\* $25
|
||||
* 2015.10.02: a\*\*\*\*\*u $25
|
||||
* 2015.09.30: s\*\*\*\*\*\*\*@gmail.com $10
|
@ -1,12 +0,0 @@
|
||||
# Project V2Ray
|
||||
|
||||
[![Build Status](https://travis-ci.org/v2ray/v2ray-core.svg?branch=master)](https://travis-ci.org/v2ray/v2ray-core)
|
||||
[![Coverage Status](https://coveralls.io/repos/v2ray/v2ray-core/badge.svg?branch=master&service=github)](https://coveralls.io/github/v2ray/v2ray-core?branch=master)
|
||||
[![GoDoc](https://godoc.org/github.com/v2ray/v2ray-core?status.svg)](https://godoc.org/github.com/v2ray/v2ray-core)
|
||||
![License](https://img.shields.io/github/license/v2ray/v2ray-core.svg)
|
||||
|
||||
[中文](https://github.com/V2Ray/v2ray-core/blob/master/README.md) | [English](https://github.com/V2Ray/v2ray-core/blob/master/spec/en/README.md)
|
||||
|
||||
V2Ray provides building blocks for network proxy, tunnel protocol development. It aims for easy further development of proxy software, to help people fight against internet censorship.
|
||||
|
||||
For now this project focus on defeating [the Great Firewall of China](https://en.wikipedia.org/wiki/Great_Firewall), and thus most documents are provided in Chinese. Internationlization work will be done later.
|
@ -1,37 +0,0 @@
|
||||
# 错误信息
|
||||
|
||||
## 简介
|
||||
在日志中可以看到 [Error XXXXXX] 的信息,其中 XXXXXX 表示错误代码,已知的错误代码和解释如下:
|
||||
|
||||
|
||||
## 0x0001 Authentication Error
|
||||
* 原因:未认证用户。
|
||||
* 解决:请检查客户端和服务器的用户数据。
|
||||
|
||||
## 0x0002 Protocol Version Error
|
||||
* 原因:客户端使用了不正确的协议
|
||||
* 解决:
|
||||
* 如果错误信息为 Invalid version 67 (或 71、80),则表示你的浏览器使用了 HTTP 代理,而 V2Ray 只接受 Socks 代理。
|
||||
* 请检查客户端配置。
|
||||
|
||||
## 0x0003 Corrupted Packet Error
|
||||
* 原因:网络数据损坏
|
||||
* 解决:极有可能你的网络连接被劫持,请更换网络线路或 IP。
|
||||
|
||||
|
||||
## 0x0004 IP Format Error
|
||||
* 原因:不正确的 IP 地址
|
||||
* 解决:请检查客户端软件,如浏览器的配置
|
||||
|
||||
## 0x0005 Configuration Error
|
||||
* 原因:配置文件不能正常读取
|
||||
* 解决:请检查配置文件是否存在,权限是否合适,内容是否正常
|
||||
|
||||
## 0x0006 Invalid Operation Error
|
||||
* 原因:不正确的操作
|
||||
|
||||
|
||||
## 0x03E8 Socks Version 4
|
||||
* 原因:客户端使用了 SOCKS 4 协议
|
||||
* 解决:升级客户端软件
|
||||
|
@ -1,95 +0,0 @@
|
||||
# V2Ray 简明教程
|
||||
|
||||
## 工作机制
|
||||
|
||||
你需要至少两个 V2Ray Server(设为 A、B)才可以正常穿墙。以网页浏览为例,你的浏览器和 A 以 Socks 5 协议通信,B 和目标网站之间以 HTTP 协议通信,A 和 B 之间使用 V2Ray 的自有协议 [VMess](https://github.com/V2Ray/v2ray-core/blob/master/spec/vmess.md) 通信,如下图:
|
||||
|
||||
![](https://github.com/V2Ray/v2ray-core/blob/master/spec/v2ray.png)
|
||||
|
||||
通常 Server A 运行在你自己的电脑,Server B 运行在一台海外的 VPS 中。
|
||||
|
||||
## 安装 V2Ray Server
|
||||
[安装 V2Ray](https://github.com/V2Ray/v2ray-core/blob/master/spec/install.md)
|
||||
|
||||
## 配置 V2Ray Server
|
||||
### Server A
|
||||
示例配置保存于 [vpoint_socks_vmess.json](https://github.com/v2ray/v2ray-core/blob/master/release/config/vpoint_socks_vmess.json) 文件中,格式如下:
|
||||
```javascript
|
||||
{
|
||||
"port": 1080, // 监听端口
|
||||
"log" : {
|
||||
"access": "" // 访问记录,目前只在服务器端有效,这里留空
|
||||
},
|
||||
"inbound": {
|
||||
"protocol": "socks", // 传入数据所用协议
|
||||
"settings": {
|
||||
"auth": "noauth", // 认证方式,暂时只支持匿名
|
||||
"udp": false, // 如果要使用 UDP 转发,请改成 true
|
||||
"ip": "127.0.0.1" // 如果 Server A 不是运行在本地,请标明 Server A 的实际 IP 地址,否则 UDP 转发将无法进行。
|
||||
}
|
||||
},
|
||||
"outbound": {
|
||||
"protocol": "vmess", // 中继协议,暂时只有这个
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "127.0.0.1", // Server B 的 IP 地址,IPv4 或 IPv6,不支持域名
|
||||
"port": 27183, // Server B 的监听端口,请更换成其它的值
|
||||
"users": [
|
||||
// 用户 ID,必须包含在 Server B 的配置文件中。此 ID 将被用于通信的认证,请自行更换随机的 ID,可以使用 https://www.uuidgenerator.net/ 来生成新的 ID。
|
||||
{"id": "ad937d9d-6e23-4a5a-ba23-bce5092a7c51"}
|
||||
],
|
||||
"network": "tcp" // 如果要使用 UDP 转发,请改成 "tcp,udp"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Server B
|
||||
示例配置保存于 [vpoint_vmess_freedom.json](https://github.com/v2ray/v2ray-core/blob/master/release/config/vpoint_vmess_freedom.json) 文件中,格式如下:
|
||||
```javascript
|
||||
{
|
||||
"port": 27183, // 监听端口,必须和 Server A 中指定的一致
|
||||
"log" : {
|
||||
"access": "access.log" // 访问记录
|
||||
},
|
||||
"inbound": {
|
||||
"protocol": "vmess", // 中继协议,不用改
|
||||
"settings": {
|
||||
"clients": [
|
||||
// 认可的用户 ID,必须包含 Server A 中的用户 ID
|
||||
{"id": "ad937d9d-6e23-4a5a-ba23-bce5092a7c51"}
|
||||
],
|
||||
"udp": false // 如果要使用 UDP 转发,请改成 true
|
||||
}
|
||||
},
|
||||
"outbound": {
|
||||
"protocol": "freedom", // 出口协议,不用改
|
||||
"settings": {} // 暂无配置
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 其它
|
||||
* V2Ray 的用户验证基于时间,请确保 A 和 B 所在机器的系统时间误差在一分钟以内。
|
||||
* json 配置文件实际上不支持注释(即“//”之后的部分,在使用时请务必删去)。
|
||||
|
||||
## 运行
|
||||
|
||||
Server A
|
||||
|
||||
./server --config="vpoint_socks_vmess.json 的绝对路径"
|
||||
|
||||
Server B
|
||||
|
||||
./server --config="vpoint_vmess_freedom.json 的绝对路径"
|
||||
|
||||
## 测试服务器可用性
|
||||
|
||||
curl -v --socks5-hostname 127.0.0.1:1080 https://www.google.com/
|
||||
|
||||
## 调试
|
||||
|
||||
使用过程中遇到任何问题,请参考[错误信息](https://github.com/V2Ray/v2ray-core/blob/master/spec/errors.md)。
|
@ -1,47 +0,0 @@
|
||||
# V2Ray 安装方式
|
||||
|
||||
## 预编译程序
|
||||
发布于 [Release](https://github.com/v2ray/v2ray-core/releases) 中,每周更新,[更新周期见此](https://github.com/V2Ray/v2ray-core/blob/master/spec/roadmap.md)。
|
||||
|
||||
其中:
|
||||
* v2ray-linux-32.zip: 适用于 32 位 Linux,各种发行版均可。
|
||||
* v2ray-linux-64.zip: 适用于 64 位 Linux,各种发行版均可。
|
||||
* v2ray-linux-arm.zip: 适用于 ARMv6 及之后平台的 Linux,如 Raspberry Pi。
|
||||
* v2ray-linux-arm64.zip: 适用于 ARMv8 及之后平台的 Linux。
|
||||
* v2ray-linux-macos.zip: 适用于 Mac OS X 10.7 以及之后版本。
|
||||
* v2ray-windows-32.zip: 适用于 32 位 Windows,Vista 及之后版本。
|
||||
* v2ray-windows-64.zip: 适用于 64 位 Windows,Vista 及之后版本。
|
||||
|
||||
## 编译源文件
|
||||
|
||||
大概流程,请根据实际情况修改
|
||||
|
||||
1. 安装 Git: sudo apt-get install git -y
|
||||
2. 安装 golang:
|
||||
1. 下载安装文件:
|
||||
1. 64位:curl -o go_latest.tar.gz https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz
|
||||
2. 32位:curl -o go_latest.tar.gz https://storage.googleapis.com/golang/go1.5.1.linux-386.tar.gz
|
||||
2. sudo tar -C /usr/local -xzf go_latest.tar.gz
|
||||
3. export PATH=$PATH:/usr/local/go/bin
|
||||
4. export GOPATH=$HOME/work
|
||||
3. 下载 V2Ray 源文件:go get -u github.com/v2ray/v2ray-core
|
||||
4. 生成编译脚本:go install github.com/v2ray/v2ray-core/tools/build
|
||||
5. 编译 V2Ray:$GOPATH/bin/build
|
||||
6. V2Ray 程序及配置文件会被放在 $GOPATH/bin/v2ray-XXX 文件夹下(XXX 视平台不同而不同)
|
||||
|
||||
### Arch Linux
|
||||
1. 安装 Git: sudo pacman -S git
|
||||
2. 安装 golang:sudo pacman -S go
|
||||
1. export GOPATH=$HOME/work
|
||||
3. go get -u github.com/v2ray/v2ray-core
|
||||
4. go install github.com/v2ray/v2ray-core/tools/build
|
||||
5. $GOPATH/bin/build
|
||||
|
||||
### Debian / Ubuntu
|
||||
bash <(curl -s https://raw.githubusercontent.com/v2ray/v2ray-core/master/release/install.sh)
|
||||
|
||||
此脚本会自动安装 git 和 golan 1.5 (如果系统上没有的话,并且需要 root 权限),然后把 v2ray 编译到 $GOPATH/bin/v2ray,新装的 golang 会把 GOPATH 设定到 /v2ray。
|
||||
|
||||
|
||||
## 配置和运行
|
||||
[链接](https://github.com/V2Ray/v2ray-core/blob/master/spec/guide.md)
|
@ -1,45 +0,0 @@
|
||||
# Issue 指引
|
||||
|
||||
在新建 Issue 之前请先阅读下面的内容,以提高 Issue 的质量和效率。
|
||||
|
||||
## 开放分类
|
||||
在创建 Issue 的时候可标记为以下分类:
|
||||
|
||||
### Bug
|
||||
代码的质量问题,可以是功能性(Functionality),稳定性(Reliability)或者性能(Performance)。在 Bug 的内容中请注明下列内容以方便重现:
|
||||
|
||||
* 操作系统:如 Windows 10,Ubuntu 14.04 等,64 位 / 32 位
|
||||
* V2Ray 版本:版本号或源码同步日期
|
||||
* Golang 版本:如果有的话
|
||||
* 问题描述:任何的错误信息,不正常的行为等
|
||||
* 日志文件:如果有的话
|
||||
|
||||
如对软件使用有任何问题也请发到这个类别。
|
||||
|
||||
请在一个 Issue 中只描述一个问题,如果你遇到多个问题,请分别创建不同的 Issue,以方便讨论和解决。如果合在一起发,将有很高的机率被标记为 Chat 而降低解决问题的优先级。
|
||||
|
||||
### Chat
|
||||
聊天或其它相关性不强的内容。标记为 Chat 的 Issue 将在最后回复 7 天后关闭。
|
||||
|
||||
### Enhancemet
|
||||
有关新特性的建议,如果是针对现有代码的修改,请详细描述您的建议。
|
||||
|
||||
## 以下分类仅供管理员使用
|
||||
### Announcement
|
||||
新版本发布、最新动态等公告内容,将于发布之后的 7 日内关闭。。
|
||||
|
||||
### Duplicate
|
||||
此 Issue 与之前的某一个 Issue 重复。
|
||||
|
||||
### Help Wanted
|
||||
标记为 Help Wanted 的 Issue 接受 Pull Request,一般为新特性的实现,如果您对其中某一个感兴趣,欢迎供献代码。
|
||||
|
||||
### Invalid
|
||||
无法重现的 Bug 或没有意义的 Issue。
|
||||
|
||||
### vLog
|
||||
用于记录一些 V2Ray 的实现细节,想法等,将于发布之后的 30 日内关闭。
|
||||
|
||||
### Won't fix
|
||||
此 Issue 是一个合理的问题,但不影响软件的正常使用,故不修复。
|
||||
|
@ -1,8 +0,0 @@
|
||||
# V2Ray 开发计划
|
||||
|
||||
## 版本号
|
||||
V2Ray 的版本号形如 X.Y.Z,其中 X 表示 Milestone,Y 表示 Release,如 2.3 表示第二个 Milestone 的第三个 Release;Z 仅作为修复紧急 Bug 之后的发布使用,一般不出现。
|
||||
|
||||
## 周期
|
||||
V2Ray 将在每周一发布一个 [Release](https://github.com/v2ray/v2ray-core/releases),每 12 周左右完成一个 Milestone。
|
||||
|
@ -1,53 +0,0 @@
|
||||
# 当前状态
|
||||
|
||||
**注释**
|
||||
* S:接近完美
|
||||
* A:稳定可用
|
||||
* B:默认开启,还在测试期,可能有各种问题
|
||||
* C:需要手动开启
|
||||
* D:正在调试期,暂不可用
|
||||
* E:计划中,欢迎 Pull Request
|
||||
|
||||
**概况**
|
||||
|
||||
| 功能 | 状态 | 备注 |
|
||||
| --------- | ---- | ---- |
|
||||
| 多用户支持 | B | |
|
||||
| 多服务器支持 | B | |
|
||||
| 负载均衡 | E | |
|
||||
| 多种加密方式 | E | 暂时只支持 AES-128 |
|
||||
| 选择性路由 | E | |
|
||||
| 自定义 DNS 解析 | E | |
|
||||
|
||||
**平台支持**
|
||||
|
||||
| 平台 | 状态 | 备注 |
|
||||
| --------- | ---- | ---- |
|
||||
| golang 编译 | A | |
|
||||
| Windows | B | |
|
||||
| Mac OS | B | |
|
||||
| Ubuntu | B | 尚不支持 apt-get 安装 |
|
||||
| Redhat | B | 尚不支持 yum 安装 |
|
||||
| OpenWRT | E | |
|
||||
|
||||
**Socks 5 协议**
|
||||
|
||||
| 功能 | 状态 | 备注 |
|
||||
| --------- | ---- | ---- |
|
||||
| TCP 连接 | A | |
|
||||
| UDP 连接 | C | [Issue #3](https://github.com/v2ray/v2ray-core/issues/3) |
|
||||
| FTP 支持 | E | [Issue #2](https://github.com/v2ray/v2ray-core/issues/2) |
|
||||
|
||||
**[VMess 协议](https://github.com/V2Ray/v2ray-core/blob/master/spec/vmess.md)**
|
||||
|
||||
| 功能 | 状态 | 备注 |
|
||||
| --------- | ---- | ---- |
|
||||
| 单一连接 | A | |
|
||||
| 连接复用 | E | |
|
||||
|
||||
**ShadowSocks 协议**
|
||||
|
||||
| 功能 | 状态 | 备注 |
|
||||
| --------- | ---- | ---- |
|
||||
| 单一连接 | E | |
|
||||
|
BIN
spec/v2ray.png
BIN
spec/v2ray.png
Binary file not shown.
Before Width: | Height: | Size: 9.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 20 KiB |
@ -1,62 +0,0 @@
|
||||
# VMess 设计
|
||||
## 摘要
|
||||
* 版本:1
|
||||
|
||||
## 格式
|
||||
### 数据请求
|
||||
认证部分:
|
||||
* 16 字节:基于时间的 hash(用户 ID),见下文
|
||||
|
||||
指令部分:
|
||||
* 1 字节:版本号,目前为 0x1
|
||||
* 16 字节:请求数据 IV
|
||||
* 16 字节:请求数据 Key
|
||||
* 4 字节:认证信息 V
|
||||
* 1 字节:指令
|
||||
* 0x00:保留
|
||||
* 0x01:TCP 请求
|
||||
* 0x02:UDP 请求
|
||||
* 2 字节:目标端口
|
||||
* 1 字节:目标类型
|
||||
* 0x01:IPv4
|
||||
* 0x02:域名
|
||||
* 0x03:IPv6
|
||||
* 目标地址:
|
||||
* 4 字节:IPv4
|
||||
* 1 字节长度 + 域名
|
||||
* 16 字节:IPv6
|
||||
* 4 字节:指令部分前面所有内容的 FNV1a hash
|
||||
|
||||
数据部分
|
||||
* N 字节:请求数据
|
||||
|
||||
其中指令部分经过 AES-128-CFB 加密:
|
||||
* Key:md5(用户 ID + 'c48619fe-8f02-49e0-b9e9-edf763e17e21')
|
||||
* IV:md5(X + X + X + X),X = []byte(UserHash 生成的时间) (8 字节, Big Endian)
|
||||
|
||||
数据部分使用 AES-128-CFB 加密,Key 和 IV 在请求数据中
|
||||
|
||||
### 数据应答
|
||||
数据部分
|
||||
* 4 字节:认证信息 V
|
||||
* N 字节:应答数据
|
||||
|
||||
其中数据部分使用 AES-128-CFB 加密,IV 为 md5(请求数据 IV),Key 为 md5(请求数据 Key)
|
||||
|
||||
## 用户 ID
|
||||
ID 等价于 [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier),是一个 16 字节长的随机数,它的作用相当于一个令牌(Token)。
|
||||
|
||||
一个 ID 形如:de305d54-75b4-431b-adb2-eb6b9e546014,几乎完全随机,可以使用任何的 UUID 生成器来生成,比如[这个](https://www.uuidgenerator.net/)。
|
||||
|
||||
ID 在消息传递过程中用于验证客户端的有效性,只有当服务器认可当前 ID 时,才进行后续操作,否则关闭连接甚至加入黑名单。
|
||||
|
||||
在多用户环境中,用户帐号应与 ID 分开存放,即用户帐号和 ID 有一对一或一对多的关系,在 V2Ray Server 中,只负责管理 ID,用户帐号(及权限、费用等)由另外的系统管理。
|
||||
|
||||
在后续版本中,V2Ray Server 之间应有能力进行沟通而生成新的临时 ID,从而减少通讯的可探测性。
|
||||
|
||||
## 基于时间的用户 ID Hash
|
||||
|
||||
* H = MD5
|
||||
* K = 用户 ID (16 字节)
|
||||
* M = UTC 时间,精确到秒,取值为当前时间的前后 30 秒随机值(8 字节, Big Endian)
|
||||
* Hash = HMAC(H, K, M)
|
Loading…
Reference in New Issue
Block a user