登录
首页 >  Golang >  Go问答

ICMP Golang :控制消息的值为空

来源:stackoverflow

时间:2024-02-21 21:00:26 345浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《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 %s\n", peer)
                if cm != nil {
                    println(cm.TTL)
                } else {
                    println("empty control message")
                }

            }
        default:

        }
    }
}

正确答案


终于,我发现了缺少的东西。

在阅读之前,需要设置ip套接字选项。

就我而言,我对 ttl 感兴趣,所以:

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

好了,本文到此结束,带大家了解了《ICMP Golang :控制消息的值为空》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>