我正在努力完成我正在开展的一个小项目。我想在GO中实现功能,允许我在输出的UDP数据包上设置IP头TTL,然后我发送并在另一端查看收到的TTL。我试过使用“网络”提供的一些连接。库到目前为止还没有成功(我可以设置TTL,但我无法读取它)。任何人都可以建议一种发送和接收UDP数据包的方法来提供对数据包的TTL字段的访问吗?
答案 0 :(得分:1)
设置TTL:
var conn *icmp.PacketConn
// for IPv4
conn.IPv4PacketConn().SetTTL(p.ttl)
conn.IPv4PacketConn().SetControlMessage(ipv4.FlagTTL, true)
// for IPv6
conn.IPv6PacketConn().SetHopLimit(p.ttl)
conn.IPv6PacketConn().SetControlMessage(ipv6.FlagHopLimit, true)
接收TTL:
var ttl, n int
bytes := make([]byte, 512)
if IPv4 {
var cm *ipv4.ControlMessage
n, cm, _, err = conn.IPv4PacketConn().ReadFrom(bytes)
if cm != nil {
ttl = cm.TTL
}
} else {
var cm *ipv6.ControlMessage
n, cm, _, err = conn.IPv6PacketConn().ReadFrom(bytes)
if cm != nil {
ttl = cm.HopLimit
}
}