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