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

View File

@@ -0,0 +1,74 @@
package fileProcess
import (
"encoding/csv"
"fmt"
"log"
"os"
"github.com/deepfence/FlowMeter/pkg/common"
)
// Save file.
func FileSave(flowSave map[string][]interface{}, mapKeys map[string]int, fname string) {
// logrus.Info(flowSave)
file, err := os.Create(fname + ".csv")
CheckErrorFileSave("Cannot create file", err)
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
writer.Write([]string{"fiveTuple", "srcIP", "dstIP", "protocol", "srcPort", "dstPort", "flowDuration", "flowLength", "fwdFlowLength", "bwdFlowLength", "packetSizeTotal", "packetSizeMean", "packetSizeStd", "packetSizeMin", "packetSizeMax", "fwdPacketSizeTotal", "bwdPacketSizeTotal", "fwdPacketSizeMean", "bwdPacketSizeMean", "fwdPacketSizeStd", "bwdPacketSizeStd", "fwdPacketSizeMin", "bwdPacketSizeMin", "fwdPacketSizeMax", "bwdPacketSizeMax", "IATMean", "IATStd", "IATMin", "IATMax", "fwdIATTotal", "bwdIATTotal", "fwdIATMean", "bwdIATMean", "fwdIATStd", "bwdIATStd", "fwdIATMin", "bwdIATMin", "fwdIATMax", "bwdIATMax"})
data := []interface{}{}
for flow5Tuple, values := range flowSave {
flow := common.FlowData(values)
flowArr := []interface{}{flow5Tuple, flow.SrcIP, flow.DstIP, flow.Protocol, flow.SrcPort, flow.DstPort, flow.FlowDuration, flow.FlowLength, flow.FwdFlowLength, flow.BwdFlowLength, flow.PacketSizeTotal, flow.PacketSizeMean, flow.PacketSizeStd, flow.PacketSizeMin, flow.PacketSizeMax, flow.FwdPacketSizeTotal, flow.BwdPacketSizeTotal, flow.FwdPacketSizeMean, flow.BwdPacketSizeMean, flow.FwdPacketSizeStd, flow.BwdPacketSizeStd, flow.FwdPacketSizeMin, flow.BwdPacketSizeMin, flow.FwdPacketSizeMax, flow.BwdPacketSizeMax, flow.IATMean, flow.IATStd, flow.IATMin, flow.IATMax, flow.FwdIATTotal, flow.BwdIATTotal, flow.FwdIATMean, flow.BwdIATMean, flow.FwdIATStd, flow.BwdIATStd, flow.FwdIATMin, flow.BwdIATMin, flow.FwdIATMax, flow.BwdIATMax}
data = append(data, flowArr)
}
for _, value := range data {
modValue := ModifyArrTypeFileSave(value.([]interface{}))
err := writer.Write(modValue)
CheckErrorFileSave("Cannot write to file", err)
}
}
// Type cast arrays for saving of file.
func ModifyArrTypeFileSave(array []interface{}) []string {
modArray := []string{}
value := ""
for i := 0; i < len(array); i++ {
_, ok := array[i].(string)
if ok {
value = array[i].(string)
} else {
value = fmt.Sprintf("%f", array[i])
}
modArray = append(modArray, value)
}
return modArray
}
// Check errors during saving of file.
func CheckErrorFileSave(message string, err error) {
if err != nil {
log.Fatal(message, err)
}
}