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

How to read both input interface and remote socket address for an UDP datagram received in Golang?

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

UDPConn.ReadFromUDP() returns net.UDPAddr 加上数据报的源套接字地址(srcIP+srcPort)。

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

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

当底层套接字是 UDP 时,.ReadFrom() returns *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)
}