通过组播将数据包发送到接口

时间:2018-11-14 22:07:32

标签: c++ sockets multicast

我正在尝试通过本地多播(IPv6)发送u_char *packet(特定协议的格式)。

这些是我已经完成的步骤:

  • 通过if_nametoindex(interface.c_str())获取接口索引,其中interface.c_str()是带有接口名称的字符串
  • 获取与struct ifaddrs *ifcgetifaddrs(&ifc)的接口的IPv6地址,在其中迭代ifc,将ifc->ifa_nameinterface.c_str()进行比较,并使用{{ 1}}
  • 使用IN6_IS_ADDR_LINKLOCAL(...)设置套接字,将套接字选项socket(AF_INET6, SOCK_DGRAM, 0)设置为1,SO_REUSEADDR设置为255,将IPV6_MULTICAST_HOPS设置为接口的索引
  • IPV6_MULTICAST_IF设置为:

    struct sockaddr_in6
  • 使用struct sockaddr_in6 sa; bzero(&sa, sizeof(sa)); sa.sin6_family = AF_INET6; sa.sin6_port = htons(521); //Port RIPng sa.sin6_scope_id = interfaceIndex; sa.sin6_addr = in6addr_any;

  • 绑定套接字
  • 发送bind(sock, (struct sockaddr*)&sa, sizeof(sa))

此后,我尝试使用Wireshark进行侦听,但未检测到相同协议名称的数据包。

我在哪里做错了?

0 个答案:

没有答案