首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数来确定IP地址是否为多播地址。

问函数来确定IP地址是否为多播地址。
EN

Stack Overflow用户
提问于 2014-02-25 13:12:59
回答 6查看 11.6K关注 0票数 3

如果用户输入诸如"239.4.4.4“这样的IP地址,如何使用linux C中可用的任何功能来确定这个IP地址是多播的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-11-25 15:14:54

代码语言:javascript
复制
/**********************************************************************************************************************
 * Checks if specified IP is multicast IP. Multicast IP ranges from 224.0.0.0 to 239.255.255.255.
 *
 * Returns 0 if specified IP is not multicast IP, else non-zero.
 *
 * Parameters:
 *      ip                          IP to check for multicast IP, stored in network byte-order.
 *********************************************************************************************************************/
int net_ip__is_multicast_ip(in_addr_t ip){
    char *ip_str = (char *) &ip;

    int i = ip_str[0] & 0xFF;

    // we will check only first byte of IP
    // and if it from 224 to 239, then it can
    // represent multicast IP.
    if(i >=  224 && i <= 239){
        return 1;
    }

    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-25 13:19:09

IPv4多播地址是由最重要的比特1110定义的,因此:

  1. 如果IP地址存储为32位无符号变量,则向变量应用>> 28,然后检查结果是否为14 (1110),如isMulti = ((address >> 28) == 14);。
  2. 如果IP地址存储为由4个未签名字符组成的元组,则检查第一个(MSB)是否包含在224和239之间。
票数 6
EN

Stack Overflow用户

发布于 2014-02-25 13:18:52

多播地址范围从224.0.0.0到239.255.255.255.地址

因此,只要检查地址是否在范围内就足够了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22015308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档