From a1281360cdd01e78534d1450e4c4e0b52fb38d7a Mon Sep 17 00:00:00 2001 From: maride Date: Thu, 28 Nov 2019 18:48:54 +0100 Subject: [PATCH] Fix 'DHCPv4 length 0 too short' error --- ethernet/dhcpv4/dhcp.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ethernet/dhcpv4/dhcp.go b/ethernet/dhcpv4/dhcp.go index d7eee46..d29ac2e 100644 --- a/ethernet/dhcpv4/dhcp.go +++ b/ethernet/dhcpv4/dhcp.go @@ -18,8 +18,15 @@ func HandleDHCPv4Packet(packet gopacket.Packet) error { var dhcppacket layers.DHCPv4 var ethernetpacket layers.Ethernet + // For some reason I can't find an explanation for, + // packet.Layer(layers.LayerTypeDHCPv4).LayerContents(), which effectively is + // packet.Layers()[3].layerContents(), is empty, but + // packet.Layers()[2].layerPayload() contains the correct DHCP packet. + // ... although both calls should return the same bytes. + // TODO: Open an Issue on github.com/google/gopacket + // Decode raw packet into DHCPv4 - decodeDHCPErr := dhcppacket.DecodeFromBytes(packet.Layer(layers.LayerTypeDHCPv4).LayerContents(), gopacket.NilDecodeFeedback) + decodeDHCPErr := dhcppacket.DecodeFromBytes(packet.Layers()[2].LayerPayload(), gopacket.NilDecodeFeedback) if decodeDHCPErr != nil { // Encountered an error during decoding, most likely a broken packet return decodeDHCPErr