如果判断某个IP地址是否在某个地址范围?
如一个IP地址:“10.0.0.1”
地址范围:“10.0.0.0”~“11.11.11.11”
问题点数:100、回复次数:7Top
1 楼merlinran(天行者)回复于 2005-05-18 11:55:27 得分 0
那不简单吗?你自己都给出答案来了。把地址与范围的边界一比,不就知道了吗?Top
2 楼LinYF1980(大羽飞鹤)回复于 2005-05-19 08:51:42 得分 0
就是
Top
3 楼boxban(冻酸梨)回复于 2005-05-19 09:00:00 得分 80
你的问题并不是很明确:
地址范围:“10.0.0.0”~“11.11.11.11”?IP地址大小的比较规则是什么呢?
11.10.200.200 在这个范围吗? 10.123.11.22 在这个范围吗?
实际上,如果明确了比较规则,代码应该就很简单了。
如果你按照IP地址的32位整数来比较,那是最简单的了:
ntohl(inet_aton("10.0.0.1")) < ntohl(inet_aton("11.0.0.1"))
Top
4 楼Caps77(厉兵秣马)回复于 2005-05-19 14:37:14 得分 10
int IsValidIp(char *szIP)
{
int ip0, ip1, ip2, ip3;
sscanf(szIP, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
if((10<=ip0&&ip0<=11)&&(0<=ip1&&ip1<=11)
&&(0<=ip2&&ip2<=11)&&(0<=ip3&&ip3<11))
return 1;
return 0;
}Top
5 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-20 19:58:28 得分 0
自己定义好范围的区间,就好判断了Top
6 楼qrlvls( 空 气 )回复于 2005-05-20 20:11:42 得分 10
同意上面的这种方法:
IP地址以主机字节序存储就是一个四字节无符号整数
ntohl(inet_aton("10.0.0.1")) < ntohl(inet_aton("11.0.0.1"))Top
7 楼galois_godel()回复于 2005-05-21 12:27:55 得分 0
自己写一个比较函数,你想要怎么比就怎么比Top




