【问题标题】:Filtering out IPv6 multicast address range过滤出 IPv6 多播地址范围
【发布时间】:2016-02-10 23:11:11
【问题描述】:

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

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 正如@dbush 指出的那样,很容易确定它是否是多播地址。较难的部分是根据标志和范围确定哪种多播。某些多播地址无效,具体取决于标志的设置方式(例如,如果设置了 R 标志,则机器人的 P 和 T 标志也必须设置,如果其中一个或两者都未设置,则它是无效的多播地址) .

标签: c ipv6 multicast


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多