gpt4 book ai didi

go - 在 GO 中获取传入的 TTL

转载 作者:行者123 更新时间:2023-12-01 20:22:46 26 4
gpt4 key购买 nike

我正在努力处理一个小项目。我想在 GO 中实现允许我在传出的 UDP 数据包上设置 IP header TTL 的功能,然后我发送该数据包并在另一端查看接收到的 TTL。我尝试使用“net”库提供的多个连接,但到目前为止没有成功(我可以设置 TTL,但我无法读取它)。任何人都可以建议一种发送和接收提供对数据包的 TTL 字段的访问的 UDP 数据包的方法吗?

最佳答案

设置 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
}
}

关于go - 在 GO 中获取传入的 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109485/

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