go - 在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])
}
}