gpt4 book ai didi

go - 使用 golang 进行 NTP 检测,有效负载为空

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:55 24 4
gpt4 key购买 nike

我正在使用 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

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

最佳答案

通过阅读 golang 源代码,我遇到了这个:

// 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
}

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

关于go - 使用 golang 进行 NTP 检测,有效负载为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42802969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com