1
0

tls.go 676 B

123456789101112131415161718192021222324252627
  1. package sniff
  2. import (
  3. "context"
  4. "crypto/tls"
  5. "io"
  6. "github.com/sagernet/sing-box/adapter"
  7. C "github.com/sagernet/sing-box/constant"
  8. "github.com/sagernet/sing/common/bufio"
  9. )
  10. func TLSClientHello(ctx context.Context, metadata *adapter.InboundContext, reader io.Reader) error {
  11. var clientHello *tls.ClientHelloInfo
  12. err := tls.Server(bufio.NewReadOnlyConn(reader), &tls.Config{
  13. GetConfigForClient: func(argHello *tls.ClientHelloInfo) (*tls.Config, error) {
  14. clientHello = argHello
  15. return nil, nil
  16. },
  17. }).HandshakeContext(ctx)
  18. if clientHello != nil {
  19. metadata.Protocol = C.ProtocolTLS
  20. metadata.Domain = clientHello.ServerName
  21. return nil
  22. }
  23. return err
  24. }