1 // Copyright 2012 Google, Inc. All rights reserved.
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the LICENSE file in the root of the source
19 "github.com/google/gopacket"
20 "github.com/google/gopacket/layers"
21 "github.com/google/gopacket/pcap"
24 var input = flag.String("i", "", "Input filename")
27 var handler *pcap.Handle
31 log.Fatalf("Please specify input filename")
33 if handler, err = pcap.OpenOffline(*input); err != nil {
34 log.Fatalf("Failed to open: %s: %s", *input, err)
38 filter := strings.Join(args, " ")
39 if err := handler.SetBPFFilter(filter); err != nil {
40 log.Fatalf("Failed to set BPF filter \"%s\": %s", filter, err)
44 var decoder gopacket.Decoder
46 linkType := fmt.Sprintf("%s", handler.LinkType())
47 if decoder, ok = gopacket.DecodersByLayerName[linkType]; !ok {
48 log.Fatalf("Failed to find decoder to pcap's linktype %s", linkType)
50 source := gopacket.NewPacketSource(handler, decoder)
52 pktNonTcp := uint64(0)
54 fmt.Println("test([]testSequence{")
55 for packet := range source.Packets() {
57 tcp := packet.Layer(layers.LayerTypeTCP)
63 tcp := tcp.(*layers.TCP)
64 //fmt.Printf("packet: %s\n", tcp)
68 b.WriteString("tcp: layers.TCP{\n")
70 b.WriteString(" SYN: true,\n")
73 b.WriteString(" ACK: true,\n")
76 b.WriteString(" RST: true,\n")
79 b.WriteString(" FIN: true,\n")
81 b.WriteString(fmt.Sprintf(" SrcPort: %d,\n", tcp.SrcPort))
82 b.WriteString(fmt.Sprintf(" DstPort: %d,\n", tcp.DstPort))
83 b.WriteString(fmt.Sprintf(" Seq: %d,\n", tcp.Seq))
84 b.WriteString(fmt.Sprintf(" Ack: %d,\n", tcp.Ack))
85 b.WriteString(" BaseLayer: layers.BaseLayer{Payload: []byte{")
86 for _, p := range tcp.Payload {
87 b.WriteString(fmt.Sprintf("%d,", p))
89 b.WriteString("}},\n")
92 b.WriteString("ci: gopacket.CaptureInfo{\n")
93 ts := packet.Metadata().CaptureInfo.Timestamp
94 b.WriteString(fmt.Sprintf(" Timestamp: time.Unix(%d,%d),\n", ts.Unix(), ts.Nanosecond()))
104 fmt.Fprintf(os.Stderr, "Total: %d, TCP: %d, non-TCP: %d\n", count, pktTcp, pktNonTcp)