我正在尝试使用 golang 读取我的 wifi 卡接收到的链路层数据包。我编写的程序编译成功并且运行没有任何错误,但它似乎在尝试从套接字读取时卡住了(syscall.Recvfrom(fd, data, 0- 准确地说是此时)。我究竟做错了什么?
PS:wlx34e894f77905是我的wifi设备的名称。
我试图读取数据包的函数:
func readFromSocket() {
fd, error := syscall.Socket(syscall.AF_PACKET, syscall.SOCK_RAW, syscall.ETH_P_ALL)
if error != nil {
syscall.Close(fd)
panic(error)
}
err := syscall.BindToDevice(fd, "wlx34e894f77905")
if err != nil {
syscall.Close(fd)
panic(err)
}
data := make([]byte, 1024)
for {
syscall.Recvfrom(fd, data, 0)
fmt.Println(data)
}
}
Run Code Online (Sandbox Code Playgroud)
netstat -r 输出:
default _gateway 0.0.0.0 UG 0 0 0 wlx34e894f77905
link-local 0.0.0.0 255.255.0.0 U 0 0 0 wlx34e894f77905
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 …Run Code Online (Sandbox Code Playgroud) 我有一个Transaction包含以下字段的结构,
type Transaction struct {
Sender string `json:"sender"`
Receiver string `json:"receiver"`
Signature string `json:"signature"`
Amount int64 `json:"amount"`
}
Run Code Online (Sandbox Code Playgroud)
我还有一个函数GetPrivateKey(),它返回一个*rsa.PrivateKey
func GetPrivateKey() (*rsa.PrivateKey, error) {
key, err := ioutil.ReadFile("/Users/xxx/.ssh/id_rsa")
if err != nil {
return nil, err
}
block, _ := pem.Decode(key)
der, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return nil, err
}
return der, err
}
Run Code Online (Sandbox Code Playgroud)
我的计划是transaction使用系统中已有的私钥对结构的内容进行签名,然后将其作为字符串存储signature在结构的字段中,为此,我有一个函数SignPayload()
func SignPayload(txnObj *Transaction) error {
privateKey, err := GetPrivateKey()
if err …Run Code Online (Sandbox Code Playgroud)