登录
首页 >  Golang >  Go问答

lldp.go中如何调用decodeLinkLayerDiscovery函数?

来源:stackoverflow

时间:2024-03-23 10:00:25 293浏览 收藏

在 gopacket 库中,`decodeLinkLayerDiscovery` 函数用于解码 LLDP 数据包。要使用此函数,需要从数据包中提取 LLDP 信息层,然后调用 `decodeLinkLayerDiscovery` 函数。该函数返回一个包含解码后的 LLDP 信息的结构体,可用于访问 LLDP 数据包中的特定字段,例如 `mgmtAddress`。

问题内容

我想解码lldp数据包中的信息:lldp.go使用decodelinklayerdiscovery函数来解码,但我不知道如何使用它。例如,我想获取 mgmtaddress 的值。我该怎么做?

func readLLDP(handle *pcap.Handle, iface *net.Interface, stop chan struct{}) {
    src := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)
    in := src.Packets()

    p := gopacket.PacketBuilder{}

    p.AddLayer()

    for {
        var packet gopacket.Packet
        select {
        case <-stop:
            return
        case packet = <-in:
            lldpLayer := packet.Layer(layers.LayerTypeLinkLayerDiscovery)
            if lldpLayer == nil {
                continue
            }
            lldp := lldpLayer.(*layers.LinkLayerDiscovery)

            var chassisID string
            switch lldp.ChassisID.Subtype {
            case layers.LLDPChassisIDSubTypeMACAddr:
                chassisID = net.HardwareAddr(lldp.ChassisID.ID).String()
            default:
                chassisID = string(lldp.ChassisID.ID)
            }
            log.Printf("[%v] ChassisID %v", iface.Name, chassisID)
        }
    }
}

正确答案


我找到了解决方案,我必须使用 layertypelinklayerdiscoveryinfo :

lldpLayerInfos := packet.Layer(layers.LayerTypeLinkLayerDiscoveryInfo)
    if lldpLayerInfos == nil {
        continue
    }
    lldpInfos := lldpLayerInfos.(*layers.LinkLayerDiscoveryInfo)
    log.Printf("[%v] ************************************************", iface.Name)
    log.Printf("[%v] PortDescription : %s", iface.Name, lldpInfos.PortDescription)
    log.Printf("[%v] SysName : %s", iface.Name, lldpInfos.SysName)
    log.Printf("[%v] SysDescription : %s", iface.Name, lldpInfos.SysDescription)
    var mgmtAddress string
    switch lldpInfos.MgmtAddress.Subtype {
    case layers.IANAAddressFamilyIPV4:
        mgmtAddress = net.IP(lldpInfos.MgmtAddress.Address).String()
    default:
        mgmtAddress = string(lldpInfos.MgmtAddress.Address)
    }
    log.Printf("[%v] MgmtAddress : %s", iface.Name, mgmtAddress)

本篇关于《lldp.go中如何调用decodeLinkLayerDiscovery函数?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

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