43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package browserfingerprint
|
|
|
|
import (
|
|
paramsTypes "go-account-register/types"
|
|
"math/rand"
|
|
|
|
"github.com/go-rod/rod"
|
|
)
|
|
|
|
type BrowserFingerprint struct {
|
|
}
|
|
|
|
func (b *BrowserFingerprint) SetBrowserFingerprint(page *rod.Page, params *paramsTypes.BrowserFingerprintParams) *rod.Page {
|
|
var p *rod.Page = page
|
|
if params.Canvas {
|
|
p = setCanvas(p)
|
|
}
|
|
if params.TimeZone != "" {
|
|
p = setTimezoneAndLangAndGeo(p, params)
|
|
}
|
|
|
|
return p
|
|
}
|
|
|
|
func setCanvas(page *rod.Page) *rod.Page {
|
|
// 注入噪声脚本
|
|
// 生成随机 RGBA 偏移值 (Go 端控制)
|
|
rgba := [4]int{
|
|
rand.Intn(10) - 5, // R: -5 ~ +4
|
|
rand.Intn(10) - 5, // G
|
|
rand.Intn(10) - 5, // B
|
|
rand.Intn(10) - 5, // A
|
|
}
|
|
// 使用更隐蔽的 Canvas 指纹修改方法
|
|
page.MustEvalOnNewDocument(GetChangeCanvasJavaScript(rgba))
|
|
return page
|
|
}
|
|
|
|
func setTimezoneAndLangAndGeo(page *rod.Page, params *paramsTypes.BrowserFingerprintParams) *rod.Page {
|
|
page.MustEvalOnNewDocument(GetChangeTimezoneJavaScript(params.TimeZone, params.Language, params.GeoLocation))
|
|
return page
|
|
}
|