52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package sniffer
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/Dreamacro/clash/common/utils"
|
|
"github.com/Dreamacro/clash/constant"
|
|
"github.com/Dreamacro/clash/constant/sniffer"
|
|
)
|
|
|
|
type SnifferConfig struct {
|
|
Ports []utils.Range[uint16]
|
|
}
|
|
|
|
type BaseSniffer struct {
|
|
ports []utils.Range[uint16]
|
|
supportNetworkType constant.NetWork
|
|
}
|
|
|
|
// Protocol implements sniffer.Sniffer
|
|
func (*BaseSniffer) Protocol() string {
|
|
return "unknown"
|
|
}
|
|
|
|
// SniffTCP implements sniffer.Sniffer
|
|
func (*BaseSniffer) SniffTCP(bytes []byte) (string, error) {
|
|
return "", errors.New("TODO")
|
|
}
|
|
|
|
// SupportNetwork implements sniffer.Sniffer
|
|
func (bs *BaseSniffer) SupportNetwork() constant.NetWork {
|
|
return bs.supportNetworkType
|
|
}
|
|
|
|
// SupportPort implements sniffer.Sniffer
|
|
func (bs *BaseSniffer) SupportPort(port uint16) bool {
|
|
for _, portRange := range bs.ports {
|
|
if portRange.Contains(port) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func NewBaseSniffer(ports []utils.Range[uint16], networkType constant.NetWork) *BaseSniffer {
|
|
return &BaseSniffer{
|
|
ports: ports,
|
|
supportNetworkType: networkType,
|
|
}
|
|
}
|
|
|
|
var _ sniffer.Sniffer = (*BaseSniffer)(nil)
|