Go接收故障以太网帧

问题描述 投票:1回答:1

我正在使用基于以太网的旧协议(特别是BACnet /以太网),因此我正在编写一个应用程序,以使用Go发送和接收以太网帧。我使用的是github上的软件包,到目前为止还不错,并按照here]中的指南进行操作

我正在Linux平台上工作,特别是Debian发行版。 4.14核心。

我可以很好地发送帧,并通过Wireshark确认正在发送它们。我也因此远程设备在Wireshark上回复了我的框架。但是,我的监听功能不会以任何方式处理回复。没有任何类型或错误的输出。

我已经遵循了链接文章中的示例,但是我将在下面提供源代码。这段代码不是我的,我不相信它。它属于Matt Layher

为什么我的申请没有收到答复?

package main

import (
    "log"
    "github.com/mdlayher/ethernet"
    "github.com/mdlayher/raw"
    "net"
)

func main {
// Select the eth0 interface to use for Ethernet traffic.
ifi, err := net.InterfaceByName("eth0")
if err != nil {
    log.Fatalf("failed to open interface: %v", err)
}

// Open a raw socket using same EtherType as our frame.
c, err := raw.ListenPacket(ifi, 0xcccc)
if err != nil {
    log.Fatalf("failed to listen: %v", err)
}
defer c.Close()

// Accept frames up to interface's MTU in size.
b := make([]byte, ifi.MTU)
var f ethernet.Frame

// Keep reading frames.
for {
    n, addr, err := c.ReadFrom(b)
    if err != nil {
        log.Fatalf("failed to receive message: %v", err)
    }

    // Unpack Ethernet frame into Go representation.
    if err := (&f).UnmarshalBinary(b[:n]); err != nil {
        log.Fatalf("failed to unmarshal ethernet frame: %v", err)
    }

    // Display source of message and message itself.
    log.Printf("[%s] %s", addr.String(), string(f.Payload))
}

我正在使用基于以太网的旧协议(特别是BACnet /以太网),因此我正在编写一个应用程序,以使用Go发送和接收以太网帧。我正在使用来自github的软件包...

go ethernet
1个回答
0
投票

发现了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.