select capture mode

This commit is contained in:
hebo 2019-08-20 20:00:07 +08:00
parent a7bdc40976
commit 298e3ef2ec
1 changed files with 12 additions and 6 deletions

View File

@ -18,11 +18,13 @@ import (
var (
DeviceName string
snifferPort int
inParallel bool
)
func init() {
flag.StringVar(&DeviceName, "interface", "eth0", "network device name. Default is eth0")
flag.IntVar(&snifferPort, "port", 3306, "sniffer port. Default is 3306")
flag.BoolVar(&inParallel, "in_parallel", false, "if capture and deal package in parallel. Default is false")
}
// networkCard is network device
@ -64,15 +66,12 @@ func initEthernetHandlerFromPacpgo() (handler *pcapgo.EthernetHandle) {
panic(err.Error())
}
// fmt.Printf("++++ handler.CaptureLength: %d\n", handler.GetCaptureLength())
_ = handler.SetCaptureLength(65535)
// fmt.Printf("++++ handler.CaptureLength: %d\n", handler.GetCaptureLength())
return
}
func initEthernetHandlerFromPacp() (handler *pcap.Handle) {
// handler, err := pcap.OpenLive(DeviceName, 65535, false, pcap.BlockForever)
handler, err := pcap.OpenLive(DeviceName, 65535, false, pcap.BlockForever)
if err != nil {
panic(fmt.Sprintf("cannot open network interface %s <-- %s", DeviceName, err.Error()))
@ -87,8 +86,16 @@ func initEthernetHandlerFromPacp() (handler *pcap.Handle) {
return
}
// Listen get a connection.
func (nc *networkCard) Listen() (receiver chan model.QueryPiece) {
if inParallel {
return nc.listenInParallel()
}
return nc.listenNormal()
}
// Listen get a connection.
func (nc *networkCard) listenNormal() (receiver chan model.QueryPiece) {
receiver = make(chan model.QueryPiece, 100)
go func() {
@ -96,7 +103,6 @@ func (nc *networkCard) Listen() (receiver chan model.QueryPiece) {
for {
var data []byte
data, ci, err := handler.ZeroCopyReadPacketData()
// data, ci, err := handler.ReadPacketData()
if err != nil {
log.Error(err.Error())
time.Sleep(time.Second*3)
@ -119,7 +125,7 @@ func (nc *networkCard) Listen() (receiver chan model.QueryPiece) {
}
// Listen get a connection.
func (nc *networkCard) ListenInParallel() (receiver chan model.QueryPiece) {
func (nc *networkCard) listenInParallel() (receiver chan model.QueryPiece) {
receiver = make(chan model.QueryPiece, 100)
packageChan := make(chan gopacket.Packet, 10)