utls
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
package shadow
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/refraction-networking/utls"
|
||||
"io"
|
||||
"net"
|
||||
"time"
|
||||
@ -48,13 +48,13 @@ func handlerClient(conn net.Conn, serverAddress string, fakeAddressSNI string) {
|
||||
if HandshakePassword != "" {
|
||||
config.Rand = RandReaderObj
|
||||
}
|
||||
dial, err := tls.DialWithDialer(&net.Dialer{
|
||||
Timeout: time.Second * 5,
|
||||
}, "tcp", serverAddress, config)
|
||||
|
||||
rawConn, err := net.DialTimeout("tcp", serverAddress, time.Second*5)
|
||||
if err != nil {
|
||||
fmt.Printf("[Client] Dial server error: %v\n", err)
|
||||
return
|
||||
}
|
||||
dial := tls.UClient(rawConn, config, tls.HelloChrome_102)
|
||||
err = dial.Handshake()
|
||||
if err != nil {
|
||||
fmt.Printf("[Client] Handshake error: %v\n", err)
|
||||
|
@ -5,7 +5,10 @@ import (
|
||||
"crypto/md5"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
utls "github.com/refraction-networking/utls"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@ -64,3 +67,49 @@ func TestAes(t *testing.T) {
|
||||
|
||||
fmt.Println(string(d))
|
||||
}
|
||||
|
||||
func TestTLSFingerprint(t *testing.T) {
|
||||
|
||||
transport := http.Transport{
|
||||
DialTLS: func(network, adr string) (net.Conn, error) {
|
||||
dial, err := net.Dial(network, adr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return wrapTLSClient(dial, time.Second*5)
|
||||
},
|
||||
}
|
||||
client := http.Client{
|
||||
Transport: &transport,
|
||||
CheckRedirect: nil,
|
||||
Jar: nil,
|
||||
Timeout: 0,
|
||||
}
|
||||
get, err := client.Get("https://client.tlsfingerprint.io:8443/")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
all, err := ioutil.ReadAll(get.Body)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println(string(all))
|
||||
|
||||
}
|
||||
|
||||
func wrapTLSClient(conn net.Conn, timeout time.Duration) (net.Conn, error) {
|
||||
var err error
|
||||
|
||||
conn.SetDeadline(time.Now().Add(timeout))
|
||||
defer conn.SetDeadline(time.Time{})
|
||||
|
||||
tlsConn := utls.UClient(conn, &utls.Config{ServerName: "client.tlsfingerprint.io"}, utls.HelloChrome_102)
|
||||
|
||||
if err = tlsConn.Handshake(); err != nil {
|
||||
fmt.Println(err.Error())
|
||||
tlsConn.Close()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tlsConn, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user