ssh.go 509 B

1234567891011121314151617181920212223242526
  1. package sniff
  2. import (
  3. "bufio"
  4. "context"
  5. "io"
  6. "os"
  7. "strings"
  8. "github.com/sagernet/sing-box/adapter"
  9. C "github.com/sagernet/sing-box/constant"
  10. )
  11. func SSH(_ context.Context, metadata *adapter.InboundContext, reader io.Reader) error {
  12. scanner := bufio.NewScanner(reader)
  13. if !scanner.Scan() {
  14. return os.ErrInvalid
  15. }
  16. fistLine := scanner.Text()
  17. if !strings.HasPrefix(fistLine, "SSH-2.0-") {
  18. return os.ErrInvalid
  19. }
  20. metadata.Protocol = C.ProtocolSSH
  21. metadata.Client = fistLine[8:]
  22. return nil
  23. }