fix: fixing pcap handles w/r ops synchronization here and there (ref #88)

This commit is contained in:
evilsocket 2018-02-27 13:28:57 +01:00
commit 781437fe6f
4 changed files with 43 additions and 27 deletions

View file

@ -26,12 +26,13 @@ import (
type DHCP6Spoofer struct {
session.SessionModule
Handle *pcap.Handle
DUID *dhcp6opts.DUIDLLT
DUIDRaw []byte
Domains []string
RawDomains []byte
waitGroup *sync.WaitGroup
Handle *pcap.Handle
DUID *dhcp6opts.DUIDLLT
DUIDRaw []byte
Domains []string
RawDomains []byte
waitGroup *sync.WaitGroup
pktSourceChan chan gopacket.Packet
}
func NewDHCP6Spoofer(s *session.Session) *DHCP6Spoofer {
@ -360,13 +361,12 @@ func (s *DHCP6Spoofer) Start() error {
}
return s.SetRunning(true, func() {
defer s.Handle.Close()
s.waitGroup.Add(1)
defer s.waitGroup.Done()
src := gopacket.NewPacketSource(s.Handle, s.Handle.LinkType())
for packet := range src.Packets() {
s.pktSourceChan = src.Packets()
for packet := range s.pktSourceChan {
if s.Running() == false {
break
}
@ -378,6 +378,7 @@ func (s *DHCP6Spoofer) Start() error {
func (s *DHCP6Spoofer) Stop() error {
return s.SetRunning(false, func() {
s.pktSourceChan <- nil
s.Handle.Close()
s.waitGroup.Wait()
})