81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"anytls/proxy/padding"
|
|
"anytls/util"
|
|
"context"
|
|
"crypto/sha256"
|
|
"crypto/tls"
|
|
"flag"
|
|
"io"
|
|
"net"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var passwordSha256 []byte
|
|
|
|
func main() {
|
|
listen := flag.String("l", "0.0.0.0:8443", "server listen port")
|
|
password := flag.String("p", "", "password")
|
|
paddingScheme := flag.String("padding-scheme", "", "padding-scheme")
|
|
flag.Parse()
|
|
|
|
if *password == "" {
|
|
logrus.Fatalln("please set password")
|
|
}
|
|
if *paddingScheme != "" {
|
|
if f, err := os.Open(*paddingScheme); err == nil {
|
|
b, err := io.ReadAll(f)
|
|
if err != nil {
|
|
logrus.Fatalln(err)
|
|
}
|
|
if padding.UpdatePaddingScheme(b) {
|
|
logrus.Infoln("loaded padding scheme file:", *paddingScheme)
|
|
} else {
|
|
logrus.Errorln("wrong format padding scheme file:", *paddingScheme)
|
|
}
|
|
f.Close()
|
|
} else {
|
|
logrus.Fatalln(err)
|
|
}
|
|
}
|
|
|
|
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("[Server]", util.ProgramVersionName)
|
|
logrus.Infoln("[Server] Listening TCP", *listen)
|
|
|
|
listener, err := net.Listen("tcp", *listen)
|
|
if err != nil {
|
|
logrus.Fatalln("listen server tcp:", err)
|
|
}
|
|
|
|
tlsCert, _ := util.GenerateKeyPair(time.Now, "")
|
|
tlsConfig := &tls.Config{
|
|
GetCertificate: func(chi *tls.ClientHelloInfo) (*tls.Certificate, error) {
|
|
return tlsCert, nil
|
|
},
|
|
}
|
|
|
|
ctx := context.Background()
|
|
server := NewMyServer(tlsConfig)
|
|
|
|
for {
|
|
c, err := listener.Accept()
|
|
if err != nil {
|
|
logrus.Fatalln("accept:", err)
|
|
}
|
|
go handleTcpConnection(ctx, c, server)
|
|
}
|
|
}
|