我正在尝试检索多播数据包的发送者的 ip 以及多播数据包发送到的目标地址/接口。
当接收多播数据包recvfrom(SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen)
时,通过 from 参数返回发送者 IP,但是没有提供有关数据包发送到的地址的信息。
为了克服这个缺点,recvfrom()
我尝试使用WSARecvMsg()
它应该提供所有所需的信息。其他问题的答案似乎都非常有信心,可以使用(至少 *nix)recvmsg 方法获取所需的所有信息。
当接收到带有结构的数据包WSARecvMsg()
并检查其IN_PKTINFO
结构时,它包含以下内容:
typedef struct in_pktinfo {
IN_ADDR ipi_addr;
ULONG ipi_ifindex;
} IN_PKTINFO, *PIN_PKTINFO
从文档中,成员ipi_addr
是目标地址,并且ipi_ifindex
是接收它的接口。
从上面看来,似乎WSARecvMsg()
只能提供另一半(即目的地)而不能提供发件人信息。
我错过了什么吗?还是有另一种方法来获取我想要的信息,最好不必求助于原始套接字?