github.com/qiwihui/DBShield@v0.0.0-20171107092910-fb8553bed8ef/misc/scripts/pcap2bytearray.go (about) 1 // +build !windows 2 3 // Converts pcap file to go byte array format to simpilify making test cases. 4 5 package main 6 7 import ( 8 "fmt" 9 "log" 10 "os" 11 "strconv" 12 13 "github.com/google/gopacket" 14 "github.com/google/gopacket/layers" 15 "github.com/google/gopacket/pcap" 16 ) 17 18 const fromClient = "0" 19 const fromServer = "1" 20 21 func main() { 22 if len(os.Args) == 2 { 23 var handle *pcap.Handle 24 var err error 25 if handle, err = pcap.OpenOffline(os.Args[1]); err != nil { 26 log.Fatal("PCAP OpenOffline error:", err) 27 } 28 run(handle) 29 } else { 30 println("go run pcam2bytearray.go file.pcap") 31 } 32 } 33 34 func hex(num int) string { 35 str := "0x" 36 if num < 16 { 37 str += "0" 38 } 39 return fmt.Sprintf("%s%X", str, int(num)) 40 } 41 42 func run(src gopacket.PacketDataSource) { 43 dec := gopacket.DecodersByLayerName["Ethernet"] 44 source := gopacket.NewPacketSource(src, dec) 45 var c, s string 46 for packet := range source.Packets() { 47 var str *string 48 tcpLayer := packet.Layer(layers.LayerTypeTCP) 49 if tcpLayer == nil { 50 continue 51 } 52 tcp := tcpLayer.(*layers.TCP) 53 payload := tcpLayer.LayerPayload() 54 if len(payload) == 0 { 55 continue 56 } 57 58 if _, err := strconv.Atoi(tcp.SrcPort.String()); err != nil { 59 str = &s 60 } else { 61 str = &c 62 } 63 64 *str += " {\n " 65 for i, b := range payload { 66 *str += hex(int(b)) + ", " 67 if (i+1)%12 == 0 { 68 *str += "\n " 69 } 70 } 71 *str += "\n },\n" 72 } 73 74 fmt.Println("c.Buffer = [][]byte{") 75 fmt.Print(c) 76 fmt.Println("}") 77 fmt.Println("s.Buffer = [][]byte{") 78 fmt.Print(s) 79 fmt.Println("}") 80 }