带有原始套接字的ICMP Golang,控制消息为空值



我正在使用Golang的ICMP原始套接字。我想读取TTL,这是ReadFrom(buffer)返回的控制消息的一部分。

奇怪的是,这个值总是nil,是不是我遗漏了什么?

请在我的游乐场代码下面找到:

package main
import (
"fmt"
"golang.org/x/net/icmp"
"golang.org/x/net/ipv4"
)
func main() {
c, _ := icmp.ListenPacket("ip4:icmp", "")
rb := make([]byte, 1500)
for true {
n, cm, peer, _ := c.IPv4PacketConn().ReadFrom(rb)
rm, _ := icmp.ParseMessage(ipv4.ICMPTypeEchoReply.Protocol(), rb[:n])
switch rm.Type {
case ipv4.ICMPTypeEchoReply:
{
fmt.Printf("received answer from %sn", peer)
if cm != nil {
println(cm.TTL)
} else {
println("empty control message")
}
}
default:
}
}
}

最后,我发现了缺失的东西。

读取前需要设置IP套接字选项。

在我的例子中,我对TTL感兴趣,所以:

_ = c.IPv4PacketConn().SetControlMessage(ipv4.FlagTTL, true)

相关内容

  • 没有找到相关文章

最新更新