需求描述,
采集网络公开的shadowsocks线路,玩具类型,项目编号P1SS
技术分析
一般情况下,一个普通的shadowsocks文件如下 ss://YWVzLTI1Ni1jZmI6MTIzNDU2IUAjJDpAMTAxLjc5LjU1LjIwMTo4MDg3#US 1. ss://是协议标识 2. YWVzLTI1Ni1jZmI6MTIzNDU2IUAjJDpAMTAxLjc5LjU1LjIwMTo4MDg3是信息内容正文 3. #US是注释内容
将信息正文的内容转码
YWVzLTI1Ni1jZmI6MTIzNDU2IUAjJDpAMTAxLjc5LjU1LjIwMTo4MDg3 --> b'aes-256-cfb:123456!@#$:@101.79.55.201:8087' 可以发现是一个bytes类型的字符串
既然得到一个字符串,则可以对字符串,进行切割,获得其中的数据
// 最后一个@字符进行切分字符串
>>> s = 'aes-256-cfb:123456!@#$:@101.79.55.201:8087'
>>> s.rsplit('@',1)
['aes-256-cfb:123456!@#$:', '101.79.55.201:8087']
// 可以切分得到1 加密算法:密码
// 可以切分得到2 IP:端口
// 切分 加密算法:密码
>>> s = 'aes-256-cfb:123456!@#$:'
>>> s.split(':',1)
['aes-256-cfb', '123456!@#$:']
>>>
// 切分 IP:端口
>>> s = '101.79.55.201:8087'
>>> s.split(':',1)
['101.79.55.201', '8087']
>>>
通过3步的字符串的切分,即可以获取到需要的4个数据信息,校验一下,就可以进行入库的操作
采集源头,分类
1. ss list,一个包含JSON数据信息的列表
[
{
"remarks": "NL1",
"server": "5.253.207.85",
"server_port": "49396",
"method": "aes-256-gcm",
"password": "BdRWC38L5JUDMTYNNxJGcUwB",
"plugin": "",
"plugin_opts": {}
},
{
"remarks": "NL2",
"server": "5.253.207.86",
"server_port": "49396",
"method": "aes-256-gcm",
"password": "BdRWC38L5JUDMTYNNxJGcUwB",
"plugin": "",
"plugin_opts": {}
},
...
]
2. ss sub,一个base64转码的字符串
base64encode(
ss://238917498723...\n
ss://238472938749...\n
...
)
3. ss content,一个字符串,其中包含一段ss://298739879287的字符
架构为 前/后/库 分离
数据库 <==> API服务器 <== invoker采集服务器 <==> 采集跳板 <==> 数据源1/2/3/... 数据库 <==> API服务器 <==> checker检测服务器 <==> 检测跳板 <==> 检测站CN1/US1 数据库 <==> API服务器 ==> publish发布服务器 <==> 发布跳板 <==> WEB站Web1/Web2
