aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/google/gopacket/reassembly/cap2test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/gopacket/reassembly/cap2test.go')
-rw-r--r--vendor/github.com/google/gopacket/reassembly/cap2test.go105
1 files changed, 105 insertions, 0 deletions
diff --git a/vendor/github.com/google/gopacket/reassembly/cap2test.go b/vendor/github.com/google/gopacket/reassembly/cap2test.go
new file mode 100644
index 0000000..1d43f1d
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/cap2test.go
@@ -0,0 +1,105 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+package main
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "strings"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+)
+
+var input = flag.String("i", "", "Input filename")
+
+func main() {
+ var handler *pcap.Handle
+ var err error
+ flag.Parse()
+ if *input == "" {
+ log.Fatalf("Please specify input filename")
+ }
+ if handler, err = pcap.OpenOffline(*input); err != nil {
+ log.Fatalf("Failed to open: %s: %s", *input, err)
+ }
+ args := flag.Args()
+ if len(args) > 0 {
+ filter := strings.Join(args, " ")
+ if err := handler.SetBPFFilter(filter); err != nil {
+ log.Fatalf("Failed to set BPF filter \"%s\": %s", filter, err)
+ }
+ handler.Stats()
+ }
+ var decoder gopacket.Decoder
+ var ok bool
+ linkType := fmt.Sprintf("%s", handler.LinkType())
+ if decoder, ok = gopacket.DecodersByLayerName[linkType]; !ok {
+ log.Fatalf("Failed to find decoder to pcap's linktype %s", linkType)
+ }
+ source := gopacket.NewPacketSource(handler, decoder)
+ count := uint64(0)
+ pktNonTcp := uint64(0)
+ pktTcp := uint64(0)
+ fmt.Println("test([]testSequence{")
+ for packet := range source.Packets() {
+ count++
+ tcp := packet.Layer(layers.LayerTypeTCP)
+ if tcp == nil {
+ pktNonTcp++
+ continue
+ } else {
+ pktTcp++
+ tcp := tcp.(*layers.TCP)
+ //fmt.Printf("packet: %s\n", tcp)
+ var b bytes.Buffer
+ b.WriteString("{\n")
+ // TCP
+ b.WriteString("tcp: layers.TCP{\n")
+ if tcp.SYN {
+ b.WriteString(" SYN: true,\n")
+ }
+ if tcp.ACK {
+ b.WriteString(" ACK: true,\n")
+ }
+ if tcp.RST {
+ b.WriteString(" RST: true,\n")
+ }
+ if tcp.FIN {
+ b.WriteString(" FIN: true,\n")
+ }
+ b.WriteString(fmt.Sprintf(" SrcPort: %d,\n", tcp.SrcPort))
+ b.WriteString(fmt.Sprintf(" DstPort: %d,\n", tcp.DstPort))
+ b.WriteString(fmt.Sprintf(" Seq: %d,\n", tcp.Seq))
+ b.WriteString(fmt.Sprintf(" Ack: %d,\n", tcp.Ack))
+ b.WriteString(" BaseLayer: layers.BaseLayer{Payload: []byte{")
+ for _, p := range tcp.Payload {
+ b.WriteString(fmt.Sprintf("%d,", p))
+ }
+ b.WriteString("}},\n")
+ b.WriteString("},\n")
+ // CaptureInfo
+ b.WriteString("ci: gopacket.CaptureInfo{\n")
+ ts := packet.Metadata().CaptureInfo.Timestamp
+ b.WriteString(fmt.Sprintf(" Timestamp: time.Unix(%d,%d),\n", ts.Unix(), ts.Nanosecond()))
+ b.WriteString("},\n")
+ // Struct
+ b.WriteString("},\n")
+ fmt.Print(b.String())
+ }
+
+ }
+ fmt.Println("})")
+
+ fmt.Fprintf(os.Stderr, "Total: %d, TCP: %d, non-TCP: %d\n", count, pktTcp, pktNonTcp)
+}