美文网首页
go raw socket无法接收tcp数据问题(mac系统下)

go raw socket无法接收tcp数据问题(mac系统下)

作者: frank3 | 来源:发表于2020-07-03 11:26 被阅读0次

测试demo如下:

package main

import (
"fmt"
"net"
)

func main() {
    ipaddr   := "127.0.0.1"
    netaddr, err := net.ResolveIPAddr("ip4", padder)
    if err != nil {
        fmt.Println(err)
    }

    conn, err := net.ListenIP("ip4:tcp", netaddr)
    if err != nil {
        fmt.Println(err)
    }

    buf := make([]byte, 1024)
    for {
        numRead, recvAddr, err := conn.ReadFrom(buf)
        if err != nil {
            fmt.Println(err)
        }
        if recvAddr != nil {
            fmt.Printf("raddr: %v\n", raddr)
        }
        s := string(buf[:numRead])
        fmt.Println(s)
    }
}

在mac机器上,一个终端中运行go run main.go, 打开另一个终端用行curl 127.0.0.1 , 永远阻塞在ReadFrom那里。

mac 下测试

google之后才发现,go中raw socket只支持linux类型系统,不知道windows, BSD系统,所以有三个解决方法:

  1. 使用pcap进行实现该功能(这个可以)
  2. 使用Ethernet级别去实现(没有尝试)
  3. 换linux系统进行尝试
换linux系统进行尝试

查看go1.14源码信息:


支持平台

参考:

相关文章

网友评论

      本文标题:go raw socket无法接收tcp数据问题(mac系统下)

      本文链接:https://www.haomeiwen.com/subject/qgzjqktx.html