FILE / ScuroNeko/mtg

faketls/client_protocol.go

Исходный файл и его история в репозитории.
FILE 4c5f1a5636901e4d1e9b8d58252bea2af889a875
Files
mtg/faketls/client_protocol.go
T
2019-11-04 16:07:20 +03:00

36 lines
803 B
Go

package faketls
import (
"bufio"
"github.com/9seconds/mtg/conntypes"
"github.com/9seconds/mtg/obfuscated2"
"github.com/9seconds/mtg/wrappers/stream"
)
type ClientProtocol struct {
obfuscated2.ClientProtocol
}
func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conntypes.StreamReadWriteCloser, error) {
rewinded := stream.NewRewind(socket)
bufferedReader := bufio.NewReader(rewinded)
for _, expected := range faketlsStartBytes {
if actual, err := bufferedReader.ReadByte(); err != nil || actual != expected {
return nil, c.simulateWebsite(rewinded)
}
}
if err := c.tlsHandshake(rewinded); err != nil {
return nil, c.simulateWebsite(rewinded)
}
conn, err := c.ClientProtocol.Handshake(socket)
if err != nil {
return nil, err
}
return conn, err
}