c - 过滤掉 IPv6 多播地址范围

标签 c ipv6 multicast

对于以 struct sockaddr_in6 数据类型表示的给定 IPv6 地址,我想知道该地址是否在多播 address range 中或不。

例如,我想要一个函数is_ipv6_multicast(),其工作方式如下

struct sockaddr_in6* sa6;
...
if (is_ipv6_multicast(sa6)) {
    // do one thing
} else {
    // do another
}

谁能帮我解决这个问题?

最佳答案

IPv6 multicast addresses第一个字节的值为 0xFF。所以你可以这样测试它:

int is_ipv6_multicast(struct sockaddr_in6* sa6) {
    return (sa6->sin6_addr.s6_addr[0] == 0xff);
}

关于c - 过滤掉 IPv6 多播地址范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327834/

相关文章:

c - 在 C 语言中编码时,当输入被定向保存在整数变量中时,为什么会出现问题?

正确使用 POSIX 的 pthread_exit 和 pthread_join

c - 数据包到达后立即通知用户模式

c++ - C 预处理器作为语言创建工具的长度/限制是什么?我在哪里可以了解更多关于这些的信息?

java - IPv6组播本地部署的pub/sub系统,需要指定接口(interface)吗?

ipv6 - IPv6 是否区分大小写

dns - 创建 IPv4 和 IPv6 SPF 记录

tcp - 在连接到 wifi 之前,最初是如何发现 chromecast 的?

java - MulticastSocket.joinGroup() 错误

java - 在 Hazelcast 中,相同 vpc 实例的多播自动发现不起作用