import hashlib from typing import Dict class FingerprintGenerator: def __init__(self): # 按现实世界市场份额设计的权重分配(数组长度为100,代表百分比) self.platforms = ( ['windows'] * 70 + # 70% 概率生成 Windows ['macos'] * 25 + # 25% 概率生成 macOS ['linux'] * 5 # 5% 概率生成 Linux ) self.brands = ( ['Chrome'] * 70 + # 70% 概率生成 Chrome ['Edge'] * 20 + # 20% 概率生成 Edge ['Opera'] * 5 + # 5% 概率生成 Opera ['Vivaldi'] * 5 # 5% 概率生成 Vivaldi ) def generate(self, username: str) -> Dict: """ 根据用户名生成固定的指纹配置 """ md5_hash = hashlib.md5(username.encode('utf-8')).hexdigest() seed = int(md5_hash[:8], 16) & 0x7FFFFFFF platform_index = int(md5_hash[8:12], 16) % len(self.platforms) platform = self.platforms[platform_index] brand_index = int(md5_hash[12:16], 16) % len(self.brands) brand = self.brands[brand_index] return { "username": username, "seed": seed, "platform": platform, "brand": brand } def get_cli_args(self, username: str) -> list: """ 直接生成用于启动浏览器的命令行参数列表 """ fp = self.generate(username) return [ f"--fingerprint={fp['seed']}", f"--fingerprint-platform={fp['platform']}", f"--fingerprint-brand={fp['brand']}" ] # ================= 测试代码 ================= if __name__ == "__main__": fp_tool = FingerprintGenerator() # 测试用户 A user_a = fp_tool.generate("alice_2024") print(f"User: alice_2024 -> Seed: {user_a['seed']}, OS: {user_a['platform']}, Browser: {user_a['brand']}") # 测试用户 B user_b = fp_tool.generate("bob_crypto") print(f"User: bob_crypto -> Seed: {user_b['seed']}, OS: {user_b['platform']}, Browser: {user_b['brand']}") # 测试用户 C user_c = fp_tool.generate("jerry_crypto") print(f"User: bob_crypto -> Seed: {user_c['seed']}, OS: {user_c['platform']}, Browser: {user_c['brand']}") # 测试用户 D user_d = fp_tool.generate("luna_crypto") print(f"User: bob_crypto -> Seed: {user_d['seed']}, OS: {user_d['platform']}, Browser: {user_d['brand']}") # 测试用户 E user_e = fp_tool.generate("jone_crypto") print(f"User: bob_crypto -> Seed: {user_e['seed']}, OS: {user_e['platform']}, Browser: {user_e['brand']}") # 测试用户 F user_f = fp_tool.generate("tom_crypto") print(f"User: bob_crypto -> Seed: {user_f['seed']}, OS: {user_f['platform']}, Browser: {user_f['brand']}") # 模拟获取命令行参数 args = fp_tool.get_cli_args("alice_2024") print("\n生成的命令行参数:") print(" ".join(args))