stun.go 527 B

12345678910111213141516171819202122232425
  1. package sniff
  2. import (
  3. "context"
  4. "encoding/binary"
  5. "os"
  6. "github.com/sagernet/sing-box/adapter"
  7. C "github.com/sagernet/sing-box/constant"
  8. )
  9. func STUNMessage(_ context.Context, metadata *adapter.InboundContext, packet []byte) error {
  10. pLen := len(packet)
  11. if pLen < 20 {
  12. return os.ErrInvalid
  13. }
  14. if binary.BigEndian.Uint32(packet[4:8]) != 0x2112A442 {
  15. return os.ErrInvalid
  16. }
  17. if len(packet) < 20+int(binary.BigEndian.Uint16(packet[2:4])) {
  18. return os.ErrInvalid
  19. }
  20. metadata.Protocol = C.ProtocolSTUN
  21. return nil
  22. }