使用golang检测NTP,有效载荷为空

使用golang检测NTP,有效载荷为空,go,network-protocols,ntp,gopacket,Go,Network Protocols,Ntp,Gopacket,我正在使用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

我正在使用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中的有效负载内容是空的,我无法理解为什么会发生这种情况

打印ApplicationLayer自身时的示例屏幕截图:

打印有效负载时的示例屏幕截图:

我需要一些帮助来找出我做错了什么。
谢谢

通过阅读golang soure代码,我发现:

// NTP packets do not carry any data payload, so the empty byte slice is retured.
// In Go, a nil slice is functionally identical to an empty slice, so we
// return nil to avoid a heap allocation.
func (d *NTP) Payload() []byte {
    return nil
}

所以,显然它不应该携带有效载荷。我已经设法使用层来执行检测

我注意到您忽略了ReadPCAP返回的潜在错误。请重新考虑一下。如果人们能够处理他们的错误返回,那么许多问题都可以避免。@ZanLynx是的,我需要这样做。这只是为了测试目的。谢谢你的提示!请将文本输出作为文本而不是图像,我想这就是为什么你会投反对票。