加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

IP cidr匹配功能

发布时间:2020-12-16 10:19:59 所属栏目:百科 来源:网络整理
导读:我需要找出来,是ip属于ip mask. 例如: ip = 192.168.0.1 mask = 192.168.0.1/24. 我找到了将ip转换为mask的函数: inet_cidrtoaddr(int cidr,struct in_addr *addr){ int ocets; if (cidr 0 || cidr 32) { errno = EINVAL; return -1; } ocets = (cidr + 7)
我需要找出来,是ip属于ip mask.
例如:

ip = 192.168.0.1
mask = 192.168.0.1/24.

我找到了将ip转换为mask的函数:

inet_cidrtoaddr(int cidr,struct in_addr *addr)
{
        int ocets;

        if (cidr < 0 || cidr > 32) {
                errno = EINVAL;
                return -1;
        }
        ocets = (cidr + 7) / 8;

        addr->s_addr = 0;
        if (ocets > 0) {
                memset(&addr->s_addr,255,(size_t)ocets - 1);
                memset((unsigned char *)&addr->s_addr + (ocets - 1),(256 - (1 << (32 - cidr) % 8)),1);
        }

        return 0;
}

我如何比较ip和cidr范围?

解决方法

如果您有IP地址,网络地址和网络掩码,那么您可以使用如下函数:

bool
is_in_net (
        const struct in_addr*   addr,/* host byte order */
        const struct in_addr*   netaddr,const struct in_addr*   netmask
        )
{
   if ((addr->s_addr & netmask->s_addr) == (netaddr->s_addr & netmask->s_addr))
      return true;
   return false;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读