美文网首页
golang 获取tcp连接的文件描述符fd

golang 获取tcp连接的文件描述符fd

作者: Lucas_Ye | 来源:发表于2020-08-06 11:36 被阅读0次

有个通过代理进来的tcp连接,通过Conn.RemoteAddr获取到的是代理点的ip地址,为了获取实际客户端的ip,找到了syscall.Getpeername的方法,而这个方法需要的是连接的fd。

    l, err := net.Listen("tcp", ":9091")
    handleErr(err)

    conn, err := l.Accept()
    handleErr(err)

    if s, ok := conn.(*net.TCPConn); !ok {
        handleErr(errors.New("not tcp conn"))
    } else {
        f, err := s.File()
        handleErr(err)

        sa, err := syscall.Getpeername(int(f.Fd()))
        handleErr(err)

        ip := sa.(*syscall.SockaddrInet6).Addr
        port := sa.(*syscall.SockaddrInet6).Port
        fmt.Println(ip, port, conn.RemoteAddr().String())
    }

相关文章

  • golang 获取tcp连接的文件描述符fd

    有个通过代理进来的tcp连接,通过Conn.RemoteAddr获取到的是代理点的ip地址,为了获取实际客户端的i...

  • Bufffered I/O Others

    获取相关联的文件描述符fd 成功后,fileno()返回与流关联的文件描述符。如果失败,则返回−1。这只能在给定流...

  • Linux I\O总结 -- 基础概念篇

    文件描述符 0, 1, 2 文件描述符(fd) 0 is standard in (stdin),1 is sta...

  • Shell 重定向(四):文件描述符

    Shell 有时会引用使用文件描述符(fd)的文件。我们一般使用文件描述符(fd)的范围是数字 0~9。重定向时大...

  • 高性能网络编程之C10K问题

    一台服务器最大支持多少TCP并发连接 文件句柄限制 每个socket都是一个文件描述符,一旦文件描述符用完,新的连...

  • Pwnable.kr系列--fd(1)

    fd是文件描述符,对于 len = read(fd, buf, 32)而言 fd=0,1,2分别表示从stdin,...

  • 9.文件描述符的复制

    使用dup进行文件描述符复制 dup系统调用对fd进行复制,会返回一个新的文件描述符(譬如原来的fd是3,返回的就...

  • Java NIO Channel、Buffer

    1,Channel FileDescriptor:fd文件描述符。representing an open fil...

  • Java文件描述符

    文件描述符 在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文...

  • Java的IO模型

    一.预备知识 1.1 Linux网络IO模型 fd:文件描述符 socketfd:socket描述符 描述符是一个...

网友评论

      本文标题:golang 获取tcp连接的文件描述符fd

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