如何读取在 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)
}
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)
}