browser.go 878 B

12345678910111213141516171819202122232425262728
  1. package utils
  2. import (
  3. "math/rand"
  4. "strconv"
  5. "time"
  6. "github.com/klauspost/cpuid/v2"
  7. )
  8. func ChromeVersion() int {
  9. // Use only CPU info as seed for PRNG
  10. seed := int64(cpuid.CPU.Family + cpuid.CPU.Model + cpuid.CPU.PhysicalCores + cpuid.CPU.LogicalCores + cpuid.CPU.CacheLine)
  11. rng := rand.New(rand.NewSource(seed))
  12. // Start from Chrome 144 released on 2026.1.13
  13. releaseDate := time.Date(2026, 1, 13, 0, 0, 0, 0, time.UTC)
  14. version := 144
  15. now := time.Now()
  16. // Each version has random 25-45 day interval
  17. for releaseDate.Before(now) {
  18. releaseDate = releaseDate.AddDate(0, 0, rng.Intn(21)+25)
  19. version++
  20. }
  21. return version - 1
  22. }
  23. // ChromeUA provides default browser User-Agent based on CPU-seeded PRNG.
  24. var ChromeUA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/" + strconv.Itoa(ChromeVersion()) + ".0.0.0 Safari/537.36"