This commit is contained in:
Unic-X
2023-06-18 14:03:27 +05:30
commit 3f83936e6e
21 changed files with 33255 additions and 0 deletions

106
pkg/common/flowFields.go Normal file
View File

@@ -0,0 +1,106 @@
package common
import (
"time"
"github.com/deepfence/FlowMeter/pkg/constants"
)
type FlowFeatures struct {
SrcIP interface{}
DstIP interface{}
Protocol interface{}
SrcPort interface{}
DstPort interface{}
FlowDuration float64
FlowLength float64
FwdFlowLength float64
BwdFlowLength float64
PacketSizeTotal float64
PacketSizeMean float64
PacketSizeStd float64
PacketSizeMin float64
PacketSizeMax float64
FwdPacketSizeTotal float64
BwdPacketSizeTotal float64
FwdPacketSizeMean float64
BwdPacketSizeMean float64
FwdPacketSizeStd float64
BwdPacketSizeStd float64
FwdPacketSizeMin float64
BwdPacketSizeMin float64
FwdPacketSizeMax float64
BwdPacketSizeMax float64
IATMean float64
IATStd float64
IATMin float64
IATMax float64
FwdIATTotal float64
BwdIATTotal float64
FwdIATMean float64
BwdIATMean float64
FwdIATStd float64
BwdIATStd float64
FwdIATMin float64
BwdIATMin float64
FwdIATMax float64
BwdIATMax float64
FlowLengthPerTime float64
FwdFlowLengthPerTime float64
BwdFlowLengthPerTime float64
PacketSizeTotalPerTime float64
FwdPacketSizeTotalPerTime float64
BwdPacketSizeTotalPerTime float64
}
// Create feature struct with appropriate datatypes for features.
func FlowData(values []interface{}) FlowFeatures {
flow := FlowFeatures{
SrcIP: values[constants.MapKeys["srcIP"]],
DstIP: values[constants.MapKeys["dstIP"]],
Protocol: values[constants.MapKeys["protocol"]],
SrcPort: values[constants.MapKeys["srcPort"]],
DstPort: values[constants.MapKeys["dstPort"]],
FlowDuration: float64(values[constants.MapKeys["flowDuration"]].(time.Duration) / time.Nanosecond),
FlowLength: float64(values[constants.MapKeys["flowLength"]].(int)),
FwdFlowLength: float64(values[constants.MapKeys["fwdFlowLength"]].(int)),
BwdFlowLength: float64(values[constants.MapKeys["bwdFlowLength"]].(int)),
PacketSizeTotal: float64(values[constants.MapKeys["packetSizeTotal"]].(int)),
PacketSizeMean: values[constants.MapKeys["packetSizeMean"]].(float64),
PacketSizeStd: values[constants.MapKeys["packetSizeStd"]].(float64),
PacketSizeMin: float64(values[constants.MapKeys["packetSizeMin"]].(int)),
PacketSizeMax: float64(values[constants.MapKeys["packetSizeMax"]].(int)),
FwdPacketSizeTotal: float64(values[constants.MapKeys["fwdPacketSizeTotal"]].(int)),
BwdPacketSizeTotal: float64(values[constants.MapKeys["bwdPacketSizeTotal"]].(int)),
FwdPacketSizeMean: values[constants.MapKeys["fwdPacketSizeMean"]].(float64),
BwdPacketSizeMean: values[constants.MapKeys["bwdPacketSizeMean"]].(float64),
FwdPacketSizeStd: values[constants.MapKeys["fwdPacketSizeStd"]].(float64),
BwdPacketSizeStd: values[constants.MapKeys["bwdPacketSizeStd"]].(float64),
FwdPacketSizeMin: float64(values[constants.MapKeys["fwdPacketSizeMin"]].(int)),
BwdPacketSizeMin: float64(values[constants.MapKeys["bwdPacketSizeMin"]].(int)),
FwdPacketSizeMax: float64(values[constants.MapKeys["fwdPacketSizeMax"]].(int)),
BwdPacketSizeMax: float64(values[constants.MapKeys["bwdPacketSizeMax"]].(int)),
IATMean: float64(values[constants.MapKeys["IATMean"]].(time.Duration) / time.Nanosecond),
IATStd: float64(values[constants.MapKeys["IATStd"]].(time.Duration) / time.Nanosecond),
IATMin: float64(values[constants.MapKeys["IATMin"]].(time.Duration) / time.Nanosecond),
IATMax: float64(values[constants.MapKeys["IATMax"]].(time.Duration) / time.Nanosecond),
FwdIATTotal: float64(values[constants.MapKeys["fwdIATTotal"]].(time.Duration) / time.Nanosecond),
BwdIATTotal: float64(values[constants.MapKeys["bwdIATTotal"]].(time.Duration) / time.Nanosecond),
FwdIATMean: float64(values[constants.MapKeys["fwdIATMean"]].(time.Duration) / time.Nanosecond),
BwdIATMean: float64(values[constants.MapKeys["bwdIATMean"]].(time.Duration) / time.Nanosecond),
FwdIATStd: float64(values[constants.MapKeys["fwdIATStd"]].(time.Duration) / time.Nanosecond),
BwdIATStd: float64(values[constants.MapKeys["bwdIATStd"]].(time.Duration) / time.Nanosecond),
FwdIATMin: float64(values[constants.MapKeys["fwdIATMin"]].(time.Duration) / time.Nanosecond),
BwdIATMin: float64(values[constants.MapKeys["bwdIATMin"]].(time.Duration) / time.Nanosecond),
FwdIATMax: float64(values[constants.MapKeys["fwdIATMax"]].(time.Duration) / time.Nanosecond),
BwdIATMax: float64(values[constants.MapKeys["bwdIATMax"]].(time.Duration) / time.Nanosecond),
FlowLengthPerTime: float64(values[constants.MapKeys["flowLength"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
FwdFlowLengthPerTime: float64(values[constants.MapKeys["fwdFlowLength"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
BwdFlowLengthPerTime: float64(values[constants.MapKeys["bwdFlowLength"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
PacketSizeTotalPerTime: float64(values[constants.MapKeys["packetSizeTotal"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
FwdPacketSizeTotalPerTime: float64(values[constants.MapKeys["fwdPacketSizeTotal"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
BwdPacketSizeTotalPerTime: float64(values[constants.MapKeys["bwdPacketSizeTotal"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
}
return flow
}