| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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))
|