c - 使用 WSARecvMsg 时查找多播 UDP 数据包的发送者
问题描述
我正在尝试检索多播数据包的发送者的 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()
只能提供另一半(即目的地)而不能提供发件人信息。
我错过了什么吗?还是有另一种方法来获取我想要的信息,最好不必求助于原始套接字?
解决方案
推荐阅读
- kendo-ui - 升级到 Kendo 2020.1.219 后,日历和时间选择器未在 Kendo Grid 中打开
- pine-script - 仅当 PnL 为正时金字塔
- python - 如何使用 ssl 启动 flask_socketio 应用程序?
- python - 深度学习中的 StackEnsemble
- kubernetes - 无法使用 initContainers 访问卷内容
- jmeter - 如何从命令行禁用 jMeter 中的配置元素
- c++ - 没有参数的构造函数给我错误
- xamarin.forms - 如何在组列表视图中使用分页
- java - Is there a way to crop an SVG using java-batik?
- spring - Spring boot static resources and controllers endpoint mixed