在GO中获取传入的TTL [英] Getting incoming TTL in GO
本文介绍了在GO中获取传入的TTL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在为一个正在从事的小项目而苦苦挣扎.我想在GO中实现功能,该功能允许我在传出的UDP数据包上设置IP标头TTL,然后再发送该数据包并查看另一端的接收到的TTL.我尝试使用'net'库提供的许多连接,但到目前为止没有成功(我可以设置TTL,但无法读取).谁能建议一种发送和接收UDP数据包的方法,该数据包提供对数据包TTL字段的访问?
I'm struggling with a small project I am working on. I want to implement functionality in GO that allows me to set the IP header TTL on an outgoing UDP packet that I then send and view the received TTL on the other end. I have a tried using a number of connections provided by the 'net' library and have so far had no success (I can set the TTL but I can't read it). Can anyone suggest a way of sending and receiving UDP packets that provide access to the packet's TTL field?
推荐答案
设置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中获取传入的TTL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文