mic.git


mic

~ proxy for JA4-TLS fingerprinting evasion
git clone https://github.com/djnnvx/mic.git
log | files | refs | archive | README | LICENSE

tls.go (1367B)

      1 // Package fingerprint provides implementations for controlling outbound TLS
      2 // connection fingerprints.
      3 package fingerprint
      4 
      5 import (
      6 	"fmt"
      7 
      8 	utls "github.com/bogdanfinn/utls"
      9 )
     10 
     11 // NameTable maps profile names to utls ClientHelloID presets.
     12 var NameTable = map[string]utls.ClientHelloID{
     13 	"chrome-120":        utls.HelloChrome_120,
     14 	"chrome-120-pq":     utls.HelloChrome_120_PQ,
     15 	"chrome-131":        utls.HelloChrome_131,
     16 	"chrome-133":        utls.HelloChrome_133,
     17 	"firefox-120":       utls.HelloFirefox_120,
     18 	"safari-16":         utls.HelloSafari_16_0,
     19 	"ios-16":            utls.HelloIOS_16_0,
     20 	"edge-85":           utls.HelloEdge_85,
     21 	"edge-106":          utls.HelloEdge_106,
     22 	"opera-91":          utls.HelloOpera_91,
     23 	"android-11-okhttp": utls.HelloAndroid_11_OkHttp,
     24 	"ipad-15":           utls.HelloIPad_15_6,
     25 	"qq-11":             utls.HelloQQ_11_1,
     26 	"360-7":             utls.Hello360_7_5,
     27 	"360-11":            utls.Hello360_11_0,
     28 }
     29 
     30 type TLSFingerprint struct {
     31 	name string
     32 	id   utls.ClientHelloID
     33 }
     34 
     35 func ByName(name string) (*TLSFingerprint, error) {
     36 	id, ok := NameTable[name]
     37 	if !ok {
     38 		return nil, fmt.Errorf("unknown TLS fingerprint profile %q", name)
     39 	}
     40 	return &TLSFingerprint{name: name, id: id}, nil
     41 }
     42 
     43 func (f *TLSFingerprint) Name() string {
     44 	return f.name
     45 }
     46 
     47 func (f *TLSFingerprint) ClientHelloID() utls.ClientHelloID {
     48 	return f.id
     49 }