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