dae/component/outbound/transport/tls/utls.go
秋のかえで 80d3940483
feat: add uTLS support (#94)
* feat: add uTLS

* feat: change `Utls.Imitate` to `UtlsImitate`

* feat: add desc and example config

* chore: refine code and docs

* docs(example.dae): adjust order

---------

Co-authored-by: mzz2017 <2017@duck.com>
2023-05-27 10:52:13 +08:00

64 lines
2.2 KiB
Go

package tls
import (
"crypto/tls"
"fmt"
utls "github.com/refraction-networking/utls"
)
func uTLSConfigFromTLSConfig(config *tls.Config) *utls.Config {
return &utls.Config{
ServerName: config.ServerName,
InsecureSkipVerify: config.InsecureSkipVerify,
}
}
var clientHelloIDMap = map[string]*utls.ClientHelloID{
"randomized": &utls.HelloRandomized,
"randomizedalpn": &utls.HelloRandomizedALPN,
"randomizednoalpn": &utls.HelloRandomizedNoALPN,
"firefox_auto": &utls.HelloFirefox_Auto,
"firefox_55": &utls.HelloFirefox_55,
"firefox_56": &utls.HelloFirefox_56,
"firefox_63": &utls.HelloFirefox_63,
"firefox_65": &utls.HelloFirefox_65,
"firefox_99": &utls.HelloFirefox_99,
"firefox_102": &utls.HelloFirefox_102,
"firefox_105": &utls.HelloFirefox_105,
"chrome_auto": &utls.HelloChrome_Auto,
"chrome_58": &utls.HelloChrome_58,
"chrome_62": &utls.HelloChrome_62,
"chrome_70": &utls.HelloChrome_70,
"chrome_72": &utls.HelloChrome_72,
"chrome_83": &utls.HelloChrome_83,
"chrome_87": &utls.HelloChrome_87,
"chrome_96": &utls.HelloChrome_96,
"chrome_100": &utls.HelloChrome_100,
"chrome_102": &utls.HelloChrome_102,
"ios_auto": &utls.HelloIOS_Auto,
"ios_11_1": &utls.HelloIOS_11_1,
"ios_12_1": &utls.HelloIOS_12_1,
"ios_13": &utls.HelloIOS_13,
"ios_14": &utls.HelloIOS_14,
"android_11_okhttp": &utls.HelloAndroid_11_OkHttp,
"edge_auto": &utls.HelloEdge_Auto,
"edge_85": &utls.HelloEdge_85,
"edge_106": &utls.HelloEdge_106,
"safari_auto": &utls.HelloSafari_Auto,
"safari_16_0": &utls.HelloSafari_16_0,
"360_auto": &utls.Hello360_Auto,
"360_7_5": &utls.Hello360_7_5,
"360_11_0": &utls.Hello360_11_0,
"qq_auto": &utls.HelloQQ_Auto,
"qq_11_1": &utls.HelloQQ_11_1,
}
func nameToUtlsClientHelloID(name string) (*utls.ClientHelloID, error) {
clientHelloID, ok := clientHelloIDMap[name]
if !ok {
return nil, fmt.Errorf("unknown uTLS Client Hello ID: %s", name)
}
return clientHelloID, nil
}