美文网首页
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