From 51860e130cb25902e332fc6a992d04f96ebad312 Mon Sep 17 00:00:00 2001 From: Leonid Bugaev Date: Mon, 20 Jun 2016 19:32:13 +0300 Subject: [PATCH] Add support for known network layers Fix #310 Close #311 --- raw_socket_listener/listener.go | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/raw_socket_listener/listener.go b/raw_socket_listener/listener.go index fd4f2c5..59bbcf9 100644 --- a/raw_socket_listener/listener.go +++ b/raw_socket_listener/listener.go @@ -351,16 +351,30 @@ func (t *Listener) readPcap() { continue } - if decoder == layers.LinkTypeEthernet { - // Skip ethernet layer, 14 bytes - data = packet.Data()[14:] - } else if decoder == layers.LinkTypeNull || decoder == layers.LinkTypeLoop { - data = packet.Data()[4:] - } else { - log.Println("Unknown packet layer", packet) - break + // We should remove network layer before parsing TCP/IP data + var of int + switch decoder { + case layers.LinkTypeEthernet: + of = 14 + case layers.LinkTypePPP: + of = 1 + case layers.LinkTypeFDDI: + of = 13 + case layers.LinkTypeNull: + of = 4 + case layers.LinkTypeLoop: + of = 4 + case layers.LinkTypeRaw: + of = 0 + case layers.LinkTypeLinuxSLL: + of = 16 + default: + log.Println("Unknown packet layer", packet) + break } + data = packet.Data()[of:] + version := uint8(data[0]) >> 4 if version == 4 {