import requests import re import base64 import time # 打印署名信息 signature = "PIA Shadowsocks 节点收集器 (固定密码模式)" print("#########################################") print(signature) print("#########################################\n") # 配置 num_requests = 10 # 请求次数 interval = 2 # 请求间隔(秒) output_file = "ss.txt" # 输出文件 # 固定配置 FIXED_PASSWORD = "shadowsocks" CIPHER = "aes-128-gcm" # 清空或创建文件 with open(output_file, "w") as file: file.write("") # 存储已添加的节点(去重) seen_nodes = set() def build_ss_link(host, port, region): """构建固定密码的 SS 链接""" userinfo = f"{CIPHER}:{FIXED_PASSWORD}" userinfo_b64 = base64.b64encode(userinfo.encode()).decode().rstrip('=') return f"ss://{userinfo_b64}@{host}:{port}#{region}" # 多次获取远程网页内容 for i in range(num_requests): try: print(f"\n第 {i + 1}/{num_requests} 次请求...") response = requests.get("https://serverlist.piaservers.net/shadow_socks", timeout=10) response.raise_for_status() # 提取 IP 地址和 region ip_pattern = r'"host":"([0-9.]+)"' region_pattern = r'"region":"([^"]+)"' ip_addresses = re.findall(ip_pattern, response.text) regions = re.findall(region_pattern, response.text) print(f" 找到 {len(ip_addresses)} 个节点") # 构建 SS 链接 new_count = 0 for idx, ip in enumerate(ip_addresses): region = regions[idx] if idx < len(regions) else "unknown" # 去重 node_key = f"{ip}:443" if node_key in seen_nodes: continue seen_nodes.add(node_key) # 生成 SS 链接 ss_link = build_ss_link(ip, 443, region) # 追加到文件 with open(output_file, "a") as file: file.write(ss_link + "\n") new_count += 1 print(f" 新增: {region} - {ip}:443") print(f" 本批次新增 {new_count} 个节点") # 如果不是最后一次请求,则等待一段时间 if i < num_requests - 1: time.sleep(interval) except requests.exceptions.RequestException as e: print(f" 网络错误: {e}") except Exception as e: print(f" 发生错误: {e}") # 统计最终结果 with open(output_file, "r") as file: lines = file.readlines() total = len(lines) print("\n#########################################") print(f"收集完成!共 {total} 个节点") print(f"已保存到 {output_file}") print("密码: shadowsocks") print("加密方式: aes-128-gcm") print("#########################################")