diff --git a/network/lan_endpoint.go b/network/lan_endpoint.go index 01a84e7b..1b389a5e 100644 --- a/network/lan_endpoint.go +++ b/network/lan_endpoint.go @@ -100,6 +100,10 @@ func (t *Endpoint) CIDR() string { return fmt.Sprintf("%s/%d", ip.String(), t.SubnetBits) } +func (t *Endpoint) IsMonitor() bool { + return t.IpAddress == MonitorModeAddress +} + func (t *Endpoint) String() string { if t.HwAddress == "" { return t.IpAddress diff --git a/packets/queue.go b/packets/queue.go index 69c327fe..56432ff0 100644 --- a/packets/queue.go +++ b/packets/queue.go @@ -54,15 +54,17 @@ func NewQueue(iface *network.Endpoint) (q *Queue, err error) { Activities: make(chan Activity), iface: iface, - active: true, + active: !iface.IsMonitor(), } - if q.handle, err = pcap.OpenLive(iface.Name(), 1024, true, pcap.BlockForever); err != nil { - return - } + if q.active == true { + if q.handle, err = pcap.OpenLive(iface.Name(), 1024, true, pcap.BlockForever); err != nil { + return + } - q.source = gopacket.NewPacketSource(q.handle, q.handle.LinkType()) - go q.worker() + q.source = gopacket.NewPacketSource(q.handle, q.handle.LinkType()) + go q.worker() + } return } @@ -168,6 +170,9 @@ func (q *Queue) Send(raw []byte) error { func (q *Queue) Stop() { q.Lock() defer q.Unlock() - q.handle.Close() - q.active = false + + if q.active == true { + q.handle.Close() + q.active = false + } }