diff --git a/config/config.go b/config/config.go index 9d9fb77..4a8e25d 100644 --- a/config/config.go +++ b/config/config.go @@ -43,4 +43,5 @@ type InterfacesConfig struct { Loop int `config:"loop"` FanoutID uint `config:"fanout_id"` FanoutWorker int `config:"fanout_worker"` + CustomBPF string `config:"custom_bpf"` } diff --git a/main.go b/main.go index 432c2ec..f164d65 100644 --- a/main.go +++ b/main.go @@ -45,6 +45,7 @@ func createFlags() { flag.BoolVar(&ifaceConfig.ReadSpeed, "rs", false, "Use packet timestamps with maximum pcap read speed") flag.IntVar(&ifaceConfig.Snaplen, "s", 8192, "Snaplength") flag.StringVar(&ifaceConfig.PortRange, "pr", "5060-5090", "Portrange to capture SIP") + flag.StringVar(&ifaceConfig.CustomBPF, "bpf", "", "Custom BPF to capture packets") flag.BoolVar(&ifaceConfig.WithVlan, "vlan", false, "vlan") flag.BoolVar(&ifaceConfig.WithErspan, "erspan", false, "erspan") flag.IntVar(&ifaceConfig.BufferSizeMb, "b", 32, "Interface buffersize (MB)") diff --git a/sniffer/sniffer.go b/sniffer/sniffer.go index 87211e6..4a9d11a 100644 --- a/sniffer/sniffer.go +++ b/sniffer/sniffer.go @@ -103,6 +103,9 @@ func (sniffer *SnifferSetup) setFromConfig() error { if sniffer.config.WithVlan { sniffer.bpf = fmt.Sprintf("%s or (vlan and (%s))", sniffer.bpf, sniffer.bpf) } + if sniffer.config.CustomBPF != "" { + sniffer.bpf = sniffer.config.CustomBPF + } if config.Cfg.Filter != "" { sniffer.filter = strings.Split(config.Cfg.Filter, ",")