ing
This commit is contained in:
parent
be4832f7a9
commit
d7f3ea3268
|
@ -2,6 +2,7 @@ package pcap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.loafle.net/overflow/overflow_discovery/api/module/discovery/model"
|
"git.loafle.net/overflow/overflow_discovery/api/module/discovery/model"
|
||||||
)
|
)
|
||||||
|
@ -36,10 +37,13 @@ func ReleaseScanner(zone *model.Zone) {
|
||||||
defer mtx.Unlock()
|
defer mtx.Unlock()
|
||||||
|
|
||||||
if ps, ok := instances[zone.Network]; ok {
|
if ps, ok := instances[zone.Network]; ok {
|
||||||
if ps.release() {
|
go func() {
|
||||||
ps.stop()
|
time.Sleep(2 * time.Second)
|
||||||
delete(instances, zone.Network)
|
if ps.release() {
|
||||||
}
|
ps.stop()
|
||||||
|
delete(instances, zone.Network)
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -197,6 +197,7 @@ func (ps *pCapScan) release() bool {
|
||||||
if 0 > ps.refCount {
|
if 0 > ps.refCount {
|
||||||
ps.refCount = 0
|
ps.refCount = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0 == ps.refCount
|
return 0 == ps.refCount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,6 +244,7 @@ func handleReceive(ps *pCapScan) {
|
||||||
handlePacket(ps, packet)
|
handlePacket(ps, packet)
|
||||||
case <-ps.stopChan:
|
case <-ps.stopChan:
|
||||||
ps.destroy()
|
ps.destroy()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,26 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func ScanHost(zone *model.Zone, dh *model.DiscoveryHost, resultChan chan interface{}, errChan chan error, doneChan chan<- struct{}) {
|
func ScanHost(zone *model.Zone, dh *model.DiscoveryHost, resultChan chan interface{}, errChan chan error, doneChan chan<- struct{}) {
|
||||||
|
defer func() {
|
||||||
|
doneChan <- struct{}{}
|
||||||
|
}()
|
||||||
|
|
||||||
ps, err := pcap.RetainScanner(zone)
|
ps, err := pcap.RetainScanner(zone)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
errChan <- fmt.Errorf("Discovery: Cannot retain pcap instance %v", err)
|
errChan <- fmt.Errorf("Discovery: Cannot retain pcap instance %v", err)
|
||||||
// doneChan <- struct{}{}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
pcap.ReleaseScanner(zone)
|
||||||
|
}()
|
||||||
|
|
||||||
cr, err := cidr.NewCIDRRanger(zone.Network)
|
cr, err := cidr.NewCIDRRanger(zone.Network)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
errChan <- err
|
errChan <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
hostRanges, err := getTargetHostRange(dh, cr)
|
hostRanges, err := getTargetHostRange(dh, cr)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
errChan <- err
|
errChan <- err
|
||||||
|
@ -34,11 +43,7 @@ func ScanHost(zone *model.Zone, dh *model.DiscoveryHost, resultChan chan interfa
|
||||||
|
|
||||||
arpChan := ps.OpenARP()
|
arpChan := ps.OpenARP()
|
||||||
defer func() {
|
defer func() {
|
||||||
if nil != ps {
|
ps.CloseARP(arpChan)
|
||||||
ps.CloseARP(arpChan)
|
|
||||||
pcap.ReleaseScanner(zone)
|
|
||||||
}
|
|
||||||
doneChan <- struct{}{}
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user