sniffer.go 641 B

12345678910111213141516171819202122232425262728293031323334
  1. package dns
  2. import (
  3. "golang.org/x/net/dns/dnsmessage"
  4. "github.com/v2fly/v2ray-core/v4/common"
  5. "github.com/v2fly/v2ray-core/v4/common/errors"
  6. )
  7. var errNotDNS = errors.New("not dns")
  8. type SniffHeader struct {
  9. domain string
  10. }
  11. func (s *SniffHeader) Protocol() string {
  12. return "dns"
  13. }
  14. func (s *SniffHeader) Domain() string {
  15. return s.domain
  16. }
  17. func SniffDNS(b []byte) (*SniffHeader, error) {
  18. var parser dnsmessage.Parser
  19. if common.Error2(parser.Start(b)) != nil {
  20. return nil, errNotDNS
  21. }
  22. question, err := parser.Question()
  23. if err != nil {
  24. return nil, errNotDNS
  25. }
  26. return &SniffHeader{domain: question.Name.String()}, nil
  27. }