fingerprint_utils.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import hashlib
  2. from typing import Dict
  3. class FingerprintGenerator:
  4. def __init__(self):
  5. # platform 只保留 windows
  6. self.platforms = ['windows']
  7. # brand 只保留 Chrome 和 Edge
  8. # Chrome 70%,Edge 30%
  9. self.brands = (
  10. ['Chrome'] * 70 +
  11. ['Edge'] * 30
  12. )
  13. def generate(self, username: str) -> Dict:
  14. """
  15. 根据用户名生成固定的指纹配置
  16. """
  17. md5_hash = hashlib.md5(username.encode('utf-8')).hexdigest()
  18. seed = int(md5_hash[:8], 16) & 0x7FFFFFFF
  19. # platform 固定 windows
  20. platform = 'windows'
  21. # brand 根据 hash 固定生成
  22. brand_index = int(md5_hash[12:16], 16) % len(self.brands)
  23. brand = self.brands[brand_index]
  24. return {
  25. "username": username,
  26. "seed": seed,
  27. "platform": platform,
  28. "brand": brand
  29. }
  30. def get_cli_args(self, username: str) -> list:
  31. """
  32. 直接生成用于启动浏览器的命令行参数列表
  33. """
  34. fp = self.generate(username)
  35. return [
  36. f"--fingerprint={fp['seed']}",
  37. f"--fingerprint-platform={fp['platform']}",
  38. f"--fingerprint-brand={fp['brand']}"
  39. ]
  40. # ================= 测试代码 =================
  41. if __name__ == "__main__":
  42. fp_tool = FingerprintGenerator()
  43. users = [
  44. "alice_2024",
  45. "bob_crypto",
  46. "jerry_crypto",
  47. "luna_crypto",
  48. "jone_crypto",
  49. "tom_crypto"
  50. ]
  51. for username in users:
  52. fp = fp_tool.generate(username)
  53. print(
  54. f"User: {username} -> "
  55. f"Seed: {fp['seed']}, "
  56. f"OS: {fp['platform']}, "
  57. f"Browser: {fp['brand']}"
  58. )
  59. # 模拟获取命令行参数
  60. args = fp_tool.get_cli_args("alice_2024")
  61. print("\n生成的命令行参数:")
  62. print(" ".join(args))