使用golang检测NTP,有效载荷为空
我正在使用golang和gopacket包检测NTP。我正在使用从wireshark下载的pcap。我有以下代码用于打开PCAP并处理它们:使用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
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是的,我需要这样做。这只是为了测试目的。谢谢你的提示!请将文本输出作为文本而不是图像,我想这就是为什么你会投反对票。