Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var InjectPacketCmd = &cobra.Command{ Use: "inject-packet", Short: "inject packet", Long: "inject packet", SilenceUsage: false, Run: func(cmd *cobra.Command, args []string) { pir, err := client.GetPacketInjectRequest() if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) cmd.Usage() os.Exit(1) } if ifName == "" { if ifName = getNameFromMac(pir.SrcMAC); ifName == "" { fmt.Fprintf(os.Stderr, "Could not find interface with MAC %s", pir.SrcMAC) os.Exit(1) } } rawSocket, err := rawsocket.NewRawSocket(ifName, rawsocket.OnlyIPPackets) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open socket for interface %s, err: %s\n", ifName, err) os.Exit(1) } defer rawSocket.Close() var packetForger pi.PacketForger if len(pir.Pcap) > 0 { packetForger, err = pi.NewPcapPacketGenerator(pir) } else { packetForger, err = pi.NewForgedPacketGenerator(pir, encapType) } if err != nil { fmt.Fprintf(os.Stderr, "Failed to create packet generator for interface %s, err: %s\n", ifName, err) os.Exit(1) } defer packetForger.Close() lastPacketCount := 0 showPacketCount := func() { if lastPacketCount != 0 { fmt.Fprintf(os.Stderr, "%d packet(s) injected on interface %s\n", lastPacketCount, ifName) } lastPacketCount = 0 } debouncer := debouncer.New(time.Second, showPacketCount) debouncer.Start() defer debouncer.Stop() packetCount := 0 for packet := range packetForger.PacketSource() { if packet == nil { break } if _, err := rawSocket.Write(packet.Data()); err != nil { fmt.Fprintf(os.Stderr, "Write error on interface %s: %s\n", ifName, err) os.Exit(1) } packetCount++ lastPacketCount++ debouncer.Call() } showPacketCount() fmt.Fprintf(os.Stderr, "%d packet(s) injected successfully\n", packetCount) }, }
InjectPacketCmd injects packets without using any Skydive analyzer/agent
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.