Skip to content

Commit 02e3cdc

Browse files
authored
Merge pull request #34 from synfinatic/str2pcap
Add str2pcap tool for taking debug logs and making a pcap
2 parents 05c4d80 + 46a1ad4 commit 02e3cdc

File tree

3 files changed

+83
-1
lines changed

3 files changed

+83
-1
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Added:
66

77
- Support for Wireguard (LinkType RAW) interfaces #29
8+
- Add str2pcap for improved debugging of logs
89

910
## v0.0.4 - 02-10-2020
1011

Makefile

+8-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,15 @@ BUILDINFOS := $(shell date +%FT%T%z)$(BUILDINFOSDET)
2323
HOSTNAME := $(shell hostname)
2424
LDFLAGS := -X "main.Version=$(PROJECT_VERSION)" -X "main.Buildinfos=$(BUILDINFOS)" -X "main.Tag=$(PROJECT_TAG)" -X "main.CommitID=$(PROJECT_COMMIT)"
2525
OUTPUT_NAME := $(DIST_DIR)$(PROJECT_NAME)-$(PROJECT_VERSION)-$(GOOS)-$(GOARCH)
26+
STR2PCAP_NAME := $(DIST_DIR)str2pcap-$(PROJECT_VERSION)-$(GOOS)-$(GOARCH)
2627

27-
ALL: $(OUTPUT_NAME) ## Build binary
28+
29+
ALL: $(OUTPUT_NAME) str2pcap ## Build binary
30+
31+
str2pcap: $(STR2PCAP_NAME)
32+
33+
$(STR2PCAP_NAME): str2pcap/*.go
34+
go build -o $(STR2PCAP_NAME) str2pcap/*.go
2835

2936
include help.mk # place after ALL target and before all other targets
3037

str2pcap/main.go

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package main
2+
3+
// Code to take a file with each line representing a packet in hex
4+
// Intended to be used with the log output from udp-proxy-2020
5+
6+
import (
7+
"bufio"
8+
"encoding/hex"
9+
"os"
10+
"time"
11+
12+
"github.com/google/gopacket"
13+
"github.com/google/gopacket/layers"
14+
"github.com/google/gopacket/pcapgo"
15+
log "github.com/sirupsen/logrus"
16+
flag "github.com/spf13/pflag"
17+
)
18+
19+
func main() {
20+
var out = flag.String("out", "", "Pcap file to create")
21+
var in = flag.String("in", "", "Input file name with packet data to read")
22+
var dlt = flag.Uint8("dlt", 1, "DLT value")
23+
var debug = flag.Bool("debug", false, "Enable debugging")
24+
25+
flag.Parse()
26+
if *debug == true {
27+
log.SetReportCaller(true)
28+
log.SetLevel(log.DebugLevel)
29+
} else {
30+
log.SetLevel(log.WarnLevel)
31+
}
32+
33+
if len(*out) == 0 || len(*in) == 0 {
34+
log.Fatal("Please specify --in, --out and --dlt")
35+
}
36+
37+
infile, err := os.Open(*in)
38+
if err != nil {
39+
log.Fatalf("--in %s: %s", *in, err)
40+
}
41+
inScanner := bufio.NewScanner(infile)
42+
inScanner.Split(bufio.ScanLines)
43+
44+
fh, err := os.Create(*out)
45+
if err != nil {
46+
log.Fatalf("--out %s: %s", *out, err)
47+
}
48+
49+
var linktype = layers.LinkType(*dlt)
50+
pcap := pcapgo.NewWriterNanos(fh)
51+
pcap.WriteFileHeader(65535, linktype)
52+
var i = 0
53+
for inScanner.Scan() {
54+
i += 1
55+
bytes, err := hex.DecodeString(inScanner.Text())
56+
if err != nil {
57+
log.Fatalf("reading line %d: %s", i, err)
58+
}
59+
60+
ci := gopacket.CaptureInfo{
61+
Timestamp: time.Time{},
62+
CaptureLength: len(bytes),
63+
Length: len(bytes),
64+
InterfaceIndex: 0,
65+
}
66+
err = pcap.WritePacket(ci, bytes)
67+
if err != nil {
68+
log.Fatal(err)
69+
}
70+
}
71+
72+
infile.Close()
73+
// no method to close a gopcap Writer???? WTF?
74+
}

0 commit comments

Comments
 (0)