Skip to content

Commit

Permalink
added payload flag to preserve payloads for TCP, UDP and USB packets
Browse files Browse the repository at this point in the history
  • Loading branch information
dreadl0ck committed Jan 13, 2019
1 parent 5d7c91a commit 655a29f
Show file tree
Hide file tree
Showing 13 changed files with 924 additions and 838 deletions.
1 change: 1 addition & 0 deletions cmd/flags.go
Expand Up @@ -58,4 +58,5 @@ var (

flagBaseLayer = flag.String("base", "ethernet", "select base layer")
flagDecodeOptions = flag.String("opts", "lazy", "select decoding options")
flagPayload = flag.Bool("payload", false, "capture payload for supported layers")
)
1 change: 1 addition & 0 deletions cmd/main.go
Expand Up @@ -150,6 +150,7 @@ func main() {
return
}

encoder.CapturePayload = *flagPayload
printLogo()

// print configuration as table
Expand Down
3 changes: 3 additions & 0 deletions encoder/shared.go
Expand Up @@ -27,6 +27,9 @@ var (
// BlockSize is the file system block size
BlockSize int

// CapturePayload for encoders that support it
CapturePayload = false

allEncoderNames = make(map[string]struct{})
errorMap *AtomicCounterMap
)
Expand Down
9 changes: 8 additions & 1 deletion encoder/tcp.go
Expand Up @@ -22,7 +22,13 @@ import (

var tcpEncoder = CreateLayerEncoder(types.Type_NC_TCP, layers.LayerTypeTCP, func(layer gopacket.Layer, timestamp string) proto.Message {
if tcp, ok := layer.(*layers.TCP); ok {
var opts []*types.TCPOption
var (
opts []*types.TCPOption
payload []byte
)
if CapturePayload {
payload = layer.LayerPayload()
}
for _, o := range tcp.Options {
opts = append(opts, &types.TCPOption{
OptionData: o.OptionData,
Expand Down Expand Up @@ -53,6 +59,7 @@ var tcpEncoder = CreateLayerEncoder(types.Type_NC_TCP, layers.LayerTypeTCP, func
Options: opts,
PayloadEntropy: Entropy(tcp.Payload),
PayloadSize: int32(len(tcp.Payload)),
Payload: payload,
}
}
return nil
Expand Down
5 changes: 5 additions & 0 deletions encoder/udp.go
Expand Up @@ -22,6 +22,10 @@ import (

var udpEncoder = CreateLayerEncoder(types.Type_NC_UDP, layers.LayerTypeUDP, func(layer gopacket.Layer, timestamp string) proto.Message {
if udp, ok := layer.(*layers.UDP); ok {
var payload []byte
if CapturePayload {
payload = layer.LayerPayload()
}
return &types.UDP{
Timestamp: timestamp,
SrcPort: int32(udp.SrcPort),
Expand All @@ -30,6 +34,7 @@ var udpEncoder = CreateLayerEncoder(types.Type_NC_UDP, layers.LayerTypeUDP, func
Checksum: int32(udp.Checksum),
PayloadEntropy: Entropy(udp.Payload),
PayloadSize: int32(len(udp.Payload)),
Payload: payload,
}
}
return nil
Expand Down
5 changes: 5 additions & 0 deletions encoder/usb.go
Expand Up @@ -22,6 +22,10 @@ import (

var usbEncoder = CreateLayerEncoder(types.Type_NC_USB, layers.LayerTypeUSB, func(layer gopacket.Layer, timestamp string) proto.Message {
if usb, ok := layer.(*layers.USB); ok {
var payload []byte
if CapturePayload {
payload = layer.LayerPayload()
}
return &types.USB{
Timestamp: timestamp,
ID: uint64(usb.ID),
Expand All @@ -42,6 +46,7 @@ var usbEncoder = CreateLayerEncoder(types.Type_NC_USB, layers.LayerTypeUSB, func
UrbStartFrame: uint32(usb.UrbStartFrame),
UrbCopyOfTransferFlags: uint32(usb.UrbCopyOfTransferFlags),
IsoNumDesc: uint32(usb.IsoNumDesc),
Payload: payload,
}
}
return nil
Expand Down
3 changes: 3 additions & 0 deletions netcap.proto
Expand Up @@ -547,6 +547,7 @@ message UDP {
int32 Checksum = 5;
double PayloadEntropy = 6;
int32 PayloadSize = 7;
bytes Payload = 8;
}

message TCP {
Expand All @@ -573,6 +574,7 @@ message TCP {
repeated TCPOption Options = 20;
double PayloadEntropy = 21;
int32 PayloadSize = 22;
bytes Payload = 23;
}

message TCPOption {
Expand Down Expand Up @@ -948,6 +950,7 @@ message USB {
uint32 UrbStartFrame = 17;
uint32 UrbCopyOfTransferFlags = 18;
uint32 IsoNumDesc = 19;
bytes Payload = 20;
}

message USBRequestBlockSetup {
Expand Down

0 comments on commit 655a29f

Please sign in to comment.