需求描述,
采集网络公开的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
