日度归档:2021年9月13日

采集网络公开的shadowsocks线路 2021-9-13

需求描述,

采集网络公开的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
Donate
云乞讨