我正在使用 golang 和 gopacket 包检测 NTP。我正在使用从wireshark 下载的pcap。我有以下代码用于打开 PCAP 并处理它们:
func (d *DPI) readPCAP(pcapFile string) (*pcap.Handle, error) {
// Open file instead of device
handle, err := pcap.OpenOffline(pcapFile)
if err != nil {
return nil, err
}
return handle, nil
}
这是我正在编写的执行实际检测的代码
func TestNTP(t *testing.T) {
dpi := newDPI()
handle, _ := dpi.readPCAP("data/pcap/NTP_sync.pcap")
var filter = "udp and port 123"
dpi.setFilter(handle,filter)
ntpPackets := 0
for packet := range dpi.getPacketChan(handle) {
fmt.Println("stuff: ",packet.ApplicationLayer().Payload())
if dpi.detectNTP(packet) == 1 {
ntpPackets++
} else {
fmt.Println(" Output : ", dpi.detectNTP(packet))
}
}
fmt.Println(" Total ntp packets ", ntpPackets)
}
ApplicationLayer 中的 Payload 内容为空,我无法弄清楚为什么会发生这种情况。
当我打印出 ApplicationLayer 本身时的示例屏幕截图:
https://i.gyazo.com/6257f298a09e7403bbc0be5b8ac84ccc.png
我打印出有效负载时的示例屏幕截图: https ://i.gyazo.com/7f4abd449025f5d65160fdbecffa8181.png
可以使用一些帮助找出我做错了什么。谢谢!