如何读取Golang中收到的UDP数据报的输入接口和远程套接字地址?

时间:2016-02-16 20:57:13

标签: sockets go udp

PacketConn.ReadFrom()可以提供包含输入接口ifIndex的ControlMessage

UDPConn.ReadFromUDP()返回net.UDPAddr,其中包含数据报的源套接字地址(srcIP + srcPort)。

但是,如何获取BOTH信息:输入接口ifIndex AND 远程套接字地址(srcIP + srcPort)?

编辑:我填写了一个问题:https://github.com/golang/go/issues/14362

1 个答案:

答案 0 :(得分:1)

当底层套接字是UDP时,.ReadFrom()返回一个* net.UDPAddr对象作为net.Addr结果。

因此可以使用.ReadFrom()获取输入接口(如ifIndex)和远程套接字完整端点地址(net.UDPAddr中的IPaddr +端口)。

// c is *ipv4.PacketConn

n, cm, srcAddr, err := c.ReadFrom(buf)

switch srcAddr.(type) {
    case *net.UDPAddr:
        udpAddr := srcAddr.(*net.UDPAddr)
}