Парсинг PCAPNG с пользовательскими пакетами (как проверить вспомогательные данные пакетов для UnknowLinkType)
Я пытаюсь проанализировать файл pcapng с пакетом gopacket. Это работает хорошо, но иногда я встречаю пользовательские (модифицированные) пакеты, и мне нужно их обнаружить.
Я точно знаю, что этот пользовательский пакет имеет тип инкапсуляции 148, который не может быть распознан библиотекой wireshark или gopacket. Вот пример пакета:
Пользовательский пакет в Wireshark
Когда я пытаюсь проанализировать файл pcapng с помощью gopacket, я могу проверить пакет AncillaryData из packet.Metadata() для LinkTypeEthernet или других типов. Но для пользовательских пакетов packet.Metadata().AncillaryData[0] возвращает LinkTypeUnknow.
Вот пример кода:
f, err := os.Open("sample.pcapng")
if err != nil {
return err
}
defer f.Close()
r, err := pcapgo.NewNgReader(f, pcapgo.DefaultNgReaderOptions)
if err != nil {
return err
}
packetSource := gopacket.NewPacketSource(r, layers.LayerTypeEthernet)
for packet := range packetSource.Packets() {
if packet.Metadata().AncillaryData[0] == layers.LinkTypeEthernet {
// It works!
}
}
Но этот код выдает ошибку: undefined Layers.LinkTypeUnknown
if packet.Metadata().AncillaryData[0] == layers.LinkTypeUnknown {
// Doesn't work
}
Итак, как я могу проверить вспомогательные данные для LinkTypeUnknown или значение 148? Или, пожалуйста, сообщите мне другой способ распознавания этих пользовательских пакетов.