Skip to content

yexihu/JKerCloudMonitor

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JKerCloudMonitor

极客Go玩客云监工的服务端实现,可以管理多个玩客云账号

框架

使用了python的Flask+MongoDB,还可以方便爬虫,基本目录结构如下所示:

.
├── app
│   └── __init__.py
├── config.json
├── controllers
│   ├── __init__.py
│   ├── tasks.py
│   └── users.py
├── models
│   ├── device.py
│   ├── __init__.py
│   └── user.py
└── run.py

具体可参考之前的博客: Python学习之路--Flask+MongoDB搭建Restful Server

用户模块

位置:/controllers/user

  • 注册

首先我们要提供注册接口,用户进入的第一入口,可以手机号+验证码方式,考虑到验证码需要收费,就不整了。提供个手机号或者邮箱+密码的方式来注册

  • 登录

用户登陆后可以存储用户信息,以及玩客云的账号可以和用户绑定起来

  • 其他

当然还需要修改密码,找回密码等等接口,这里就略过不写了

账号模块

位置:/controllers/account

云监工的主要功能就是监控管理所有的玩客云账号

  • 新增账号

增加一个玩客云账号,需要尝试登陆(这里区分手机号和邮箱登陆),若能登陆成功,则和绑定到对应的用户

  • 删除账号

若不需要监控该玩客云,则需要删除当前用户下的该账号,解除绑定

  • 获取账号

可以获取所有的万科云账号信息

  • 更新账号

修改玩客云的名字等

统计提取链克模块

位置:/controllers/device

统计模块主要是统计当前所有玩客云账号的设备信息,7日链克统计

  • 7日信息

获取所有玩客云账号,统计链克昨日总产量,昨日平均产量,本月产量,总产量,已提取的链克和未提取链克,近七日的产量等

  • 提取链克

方便快速提取链克,不需要登录各个账号去提取,所以需要一键提取所有链克的功能,直接存入钱包,前提是各个账号的钱包都已经配置好了

玩客云接口模块

位置:/wky

  • 玩客云接口

主要是各个迅雷玩客云的接口

  • 爬虫获取链克当前价格

未开源模块

以上模块已经完全可以使用了,接下来的扩展还未开源,若项目没啥人关注就不开源了。

  • 邮件提醒模块

邮件提醒就是玩客云如果离线了或者异常了,会给对应绑定的邮箱发送邮件,当然也可以验证码,不过验证码要收费就不再考虑了。

  • 本地轮询更新模块

轮询所有的玩客云当前的状态,目前是2小时轮询一次,查看当前的离在线情况,并且同步更新最新的数据

  • 代理模块

由于各个接口都是迅雷的,所以如果我们的服务器大量访问迅雷服务器的话,可能会被封,所以可以通过代理的方式去访问迅雷的接口,可以一次性使用10000甚至更多的代理,这样平均下来就类似一个ip地址登录一个设备

云监工中其实最主要的是破解玩客云的接口,模拟成手机网页等请求服务器来获取数据。

准备

  • 玩客云App
  • charles抓包工具

至于怎么抓包,这里就不讲了,这里随便找了一篇文章:charles抓包,照着操作基本上也就会了。

接口汇总

接口抓包分析

我们抓取设备信息相关的包,如下图: 在这里插入图片描述 它的host是

Host	https://control.onethingpcs.com

也就是请求的https的地址,

接着看出来是get请求,请求的url如下所示:

GET /listPeer?X-LICENCE-PUB=1&appversion=2.2.1&ct=2&sign=1fbb87357a71e379db26b3ac76743418&userid=5458114&v=9 HTTP/1.1

其中query string信息如下,因为是get请求,所以会跟在url中

X-LICENCE-PUB	1
appversion	2.2.1
ct	2
sign	1fbb87357a71e379db26b3ac76743418
userid	5458114
v	9

然后就是cookies信息,请求时会传过去

origin	2
sessionid	dc3dee9cbb367601e3483835c7eacc9b
userid	5458114
ct	2

返回的设备信息结果如下:

{
	"result": [0, {
		"global_appearance": 1,
		"devices": [{
			"imported": "20180519",
			"device_sn": "OCPG121196469",
			"licence": "T0NQRzEyMTE5NjQ2OS9taXVfNTQ1ODExNC8xNTI2OTA0NzQ1",
			"coturn_online": 1,
			"ip_info": {
				"country": "中国",
				"city": "杭州市",
				"isp": "电信",
				"province": "浙江省"
			},
			"status": "online",
			"exception_name": "",
			"hardware_model": "WS1608",
			"area_code": "CN",
			"ip": "xxx.xxx.xxx.xxx",
			"features": {
				"miner": 0,
				"onecloud_coin": 1526904760
			},
			"device_type": "OneCloud",
			"exception_message": "",
			"system_version": "V1.7.2",
			"lan_ip": "192.168.31.213",
			"disconnect_time": 1546440107,
			"upgradeable": false,
			"account_type": "miu",
			"device_name": "eastmoon6469",
			"is_exp": false,
			"account_name": "",
			"bind_time": 1526904745,
			"connect_time": 1546440118,
			"peerid": "00226D5A5A74889X0030",
			"mac_address": "00:22:6D:5A:xx:xx",
			"broker_id": 226568,
			"account_id": "5458114",
			"product_id": 412,
			"system_name": "挖矿固件",
			"type": 0
		}]
	}],
	"rtn": 0
}

既然我们都获取到了其中的信息,那么我们就可以模拟请求了,看下已经写好的python方法:

 # 设备信息
 # https://control.onethingpcs.com/listPeer?X-LICENCE-PUB=1&appversion=1.6.2&ct=2&sign=efbcfd2744cfd2308acd1551cf054dfd&userid=5458114&v=3 (GET)
 def getDeviceInfo(self, sessionid, userid):
     sign1 = dict(appversion='1.6.2', ct='2', userid=userid, v='3')
     sign = getSignForGet(sign1, sessionid)

     url = 'https://control.onethingpcs.com/listPeer?X-LICENCE-PUB=1&appversion=1.6.2&ct=2' + '&sign=' + sign + '&userid=' + userid + '&v=3'
     cookies = dict(sessionid=sessionid, userid=userid)
     r = proxy.get(url=url, data=None, cookies=cookies)
     datas = json_util.dumps(r.content.decode('utf-8'), ensure_ascii=False)
     return json.loads(datas)

当然其中的sessionid,userid是登录接口返回的,这里就不做分析了,可以参考登录接口的源码。还有就是sign签名的获取。为了接口更安全,客户端传的参数和服务端解析有个签名的校验。这里参考了不朽玩客云的sign生成,并结合实际接口做了略微的调整,最后是md5加密的,具体可以参考源码

About

极客Go云监工服务端

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%