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 我找到了将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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |