我正在尝试通过本地多播(IPv6)发送u_char *packet
(特定协议的格式)。
这些是我已经完成的步骤:
if_nametoindex(interface.c_str())
获取接口索引,其中interface.c_str()
是带有接口名称的字符串struct ifaddrs *ifc
和getifaddrs(&ifc)
的接口的IPv6地址,在其中迭代ifc
,将ifc->ifa_name
与interface.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进行侦听,但未检测到相同协议名称的数据包。
我在哪里做错了?