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:
bogdanvbalan 2025-01-18 13:04:54 +02:00 committed by GitHub
parent 507099c1ec
commit 0b00b1846b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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 {