mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-11 13:23:03 +00:00
Fix error on getting namespaces for pcap target files (#1691)
* Fix err when using dest arg * Add debug * Debug pcap download * Fix ns bug * Fix namespace bug * Clean debug leftovers --------- Co-authored-by: bogdan.balan1 <bogdanvalentin.balan@1nce.com>
This commit is contained in:
parent
507099c1ec
commit
0b00b1846b
@ -1,16 +1,17 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/kubeshark/gopacket"
|
|
||||||
"github.com/kubeshark/gopacket/layers"
|
|
||||||
"github.com/kubeshark/gopacket/pcapgo"
|
"github.com/kubeshark/gopacket/pcapgo"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
@ -217,20 +218,22 @@ func mergePCAPs(outputFile string, inputFiles []string) error {
|
|||||||
// Create the output file
|
// Create the output file
|
||||||
f, err := os.Create(outputFile)
|
f, err := os.Create(outputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to create output file: %w", err)
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
// Create a pcap writer for the output file
|
bufWriter := bufio.NewWriter(f)
|
||||||
writer := pcapgo.NewWriter(f)
|
defer bufWriter.Flush()
|
||||||
err = writer.WriteFileHeader(65536, layers.LinkTypeEthernet) // Snapshot length and LinkType
|
|
||||||
|
// Create the PCAP writer
|
||||||
|
writer := pcapgo.NewWriter(bufWriter)
|
||||||
|
err = writer.WriteFileHeader(65536, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to write PCAP file header: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, inputFile := range inputFiles {
|
for _, inputFile := range inputFiles {
|
||||||
log.Info().Msgf("Merging %s int %s", inputFile, outputFile)
|
// Open the input file
|
||||||
// Open each input file
|
|
||||||
file, err := os.Open(inputFile)
|
file, err := os.Open(inputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msgf("Failed to open %v", inputFile)
|
log.Error().Err(err).Msgf("Failed to open %v", inputFile)
|
||||||
@ -238,20 +241,29 @@ func mergePCAPs(outputFile string, inputFiles []string) error {
|
|||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
|
// Create the PCAP reader for the input file
|
||||||
reader, err := pcapgo.NewReader(file)
|
reader, err := pcapgo.NewReader(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msgf("Failed to create pcapng reader for %v", file.Name())
|
log.Error().Err(err).Msgf("Failed to create pcapng reader for %v", file.Name())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the packet source
|
for {
|
||||||
packetSource := gopacket.NewPacketSource(reader, layers.LinkTypeEthernet)
|
// Read packet data
|
||||||
|
data, ci, err := reader.ReadPacketData()
|
||||||
for packet := range packetSource.Packets() {
|
|
||||||
err := writer.WritePacket(packet.Metadata().CaptureInfo, packet.Data())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msgf("Failed to write packet to %v", outputFile)
|
if errors.Is(err, io.EOF) {
|
||||||
continue
|
break
|
||||||
|
}
|
||||||
|
log.Error().Err(err).Msgf("Error reading packet from file %s", inputFile)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the packet to the output file
|
||||||
|
err = writer.WritePacket(ci, data)
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msgf("Error writing packet to output file")
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -261,13 +273,16 @@ func mergePCAPs(outputFile string, inputFiles []string) error {
|
|||||||
|
|
||||||
// copyPcapFiles function for copying the PCAP files from the worker pods
|
// copyPcapFiles function for copying the PCAP files from the worker pods
|
||||||
func copyPcapFiles(clientset *kubernetes.Clientset, config *rest.Config, destDir string, cutoffTime *time.Time) error {
|
func copyPcapFiles(clientset *kubernetes.Clientset, config *rest.Config, destDir string, cutoffTime *time.Time) error {
|
||||||
kubernetesProvider, err := getKubernetesProviderForCli(false, false)
|
namespaceList, err := clientset.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Send()
|
log.Error().Err(err).Msg("Error listing namespaces")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
targetNamespaces := kubernetesProvider.GetNamespaces()
|
var targetNamespaces []string
|
||||||
|
for _, ns := range namespaceList.Items {
|
||||||
|
targetNamespaces = append(targetNamespaces, ns.Name)
|
||||||
|
}
|
||||||
|
|
||||||
// List worker pods
|
// List worker pods
|
||||||
workerPods, err := listWorkerPods(context.Background(), clientset, targetNamespaces)
|
workerPods, err := listWorkerPods(context.Background(), clientset, targetNamespaces)
|
||||||
@ -302,7 +317,6 @@ func copyPcapFiles(clientset *kubernetes.Clientset, config *rest.Config, destDir
|
|||||||
currentFiles = append(currentFiles, destFile)
|
currentFiles = append(currentFiles, destFile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(currentFiles) == 0 {
|
if len(currentFiles) == 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user