首页 > 解决方案 > 在linux中无法使用golang接收自定义数据包

问题描述

我是 golang 编程的新手,我正在尝试编写一个程序来接收我自己使用 Packeth 软件创建的数据包。当我运行程序时,它没有收到来自 Packeth 的数据包,网络中的通信数据包仍然可以正常接收。当我打开 Wireshark 时,我的程序可以接收来自 Packeth 的数据包。这是我的代码。

package main

import (
    "fmt"
    "log"
    "net"
    "syscall"
)

func main() {
    const proto = 0x0300
    s, err := syscall.Socket(syscall.AF_PACKET, syscall.SOCK_RAW, proto)
    if err != nil {
        log.Fatal("socket: ", err)
    }
    defer syscall.Close(s)
    ifi, err := net.InterfaceByName("eth0")
    if err != nil {
        log.Fatal("interfacebyname: ", err)
    }
    lla := syscall.SockaddrLinklayer{Protocol: proto, Ifindex: ifi.Index}
    if err := syscall.Bind(s, &lla); err != nil {
        log.Fatal("bind: ", err)
    }
    for {
        b := make([]byte, 100)
        _, _, err := syscall.Recvfrom(s, b, 0)
        if err != nil {
            log.Fatal("recvfrom ", err)
        }
        log.Fatal(b[0:20])
    }
}

标签: go

解决方案


推荐阅读