73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"anytls/util"
|
|
"context"
|
|
"crypto/sha256"
|
|
"crypto/tls"
|
|
"flag"
|
|
"net"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var passwordSha256 []byte
|
|
|
|
func main() {
|
|
listen := flag.String("l", "127.0.0.1:1080", "socks5 listen port")
|
|
serverAddr := flag.String("s", "127.0.0.1:8443", "server address")
|
|
sni := flag.String("sni", "", "SNI")
|
|
password := flag.String("p", "", "password")
|
|
flag.Parse()
|
|
|
|
if *password == "" {
|
|
logrus.Fatalln("please set password")
|
|
}
|
|
|
|
logLevel, err := logrus.ParseLevel(os.Getenv("LOG_LEVEL"))
|
|
if err != nil {
|
|
logLevel = logrus.InfoLevel
|
|
}
|
|
logrus.SetLevel(logLevel)
|
|
|
|
var sum = sha256.Sum256([]byte(*password))
|
|
passwordSha256 = sum[:]
|
|
|
|
logrus.Infoln("[Client]", util.ProgramVersionName)
|
|
logrus.Infoln("[Client] socks5", *listen, "=>", *serverAddr)
|
|
|
|
listener, err := net.Listen("tcp", *listen)
|
|
if err != nil {
|
|
logrus.Fatalln("listen socks5 tcp:", err)
|
|
}
|
|
|
|
tlsConfig := &tls.Config{
|
|
ServerName: *sni,
|
|
InsecureSkipVerify: true,
|
|
}
|
|
if tlsConfig.ServerName == "" {
|
|
// disable the SNI
|
|
tlsConfig.ServerName = "127.0.0.1"
|
|
}
|
|
path := strings.TrimSpace(os.Getenv("TLS_KEY_LOG"))
|
|
if path != "" {
|
|
f, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)
|
|
if err == nil {
|
|
tlsConfig.KeyLogWriter = f
|
|
}
|
|
}
|
|
|
|
ctx := context.Background()
|
|
client := NewMyClient(ctx, *serverAddr, tlsConfig)
|
|
|
|
for {
|
|
c, err := listener.Accept()
|
|
if err != nil {
|
|
logrus.Fatalln("accept:", err)
|
|
}
|
|
go handleTcpConnection(ctx, c, client)
|
|
}
|
|
}
|