package main
import (
"fmt"
"syscall"
)
func main() { `
fd, err:= syscall.Socket(syscall.AF_PACKET, syscall.SOCK_RAW, syscall.ETH_P_ALL) //opening raw socket
if (err != nil) {
fmt.Println("Error: " + err.Error())
return;
}
fmt.Println("Obtained fd ", fd)
defer syscall.Close(fd)
sa:= &syscall.SockaddrInet4{
Addr: [4]byte{10,75,24,6}, //defining my IP
}
e := syscall.Bind(fd, sa) //binding my IP
if e != nil {
fmt.Println(e)
}
fmt.Println("Entering main loop")
for {
buf := make([]byte, 1024)
numRead, err,_ := syscall.Recvfrom(fd,buf,0) //reading the packets via raw sockets
if err != nil {
fmt.Println("error")
}
fmt.Printf("%X\n",buf[:numRead])
}
}`
我试图在原始套接字中使用
ETH_P_ALL
接收来自所有协议的数据包。但我无法接收数据包。此代码是用 GoLang 编写的。你们能帮我解决一下吗
也许当你在
syscall.ETH_P_ALL
中使用syscall.Socket()
时,你应该绑定相应的套接字地址,即syscall.SockaddrLinklayer