您的位置:程序门 -> c/c++ -> c++ 语言



求个读取多ip地址段的方法。(内详)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求个读取多ip地址段的方法。(内详)[已结贴,结贴人:qihui_zhu]
发表于:2008-01-22 09:59:14 楼主
大意就是我获取一个ip后,想判断一下此ip是否在某一个地址范围中。
这个地址范围也许是1.1.0.0-1.1.1.0;1.2.0.0-1.2.1.0;....     等等的表示方法,可具体根据算法需要来定。

大致就是个读取ip段的操作,请问有没有人写过什么比较好的算法。觉得这种东西应该有人做过吧。

谢谢!
发表于:2008-01-22 10:02:461楼 得分:30
查inet_addr函数
发表于:2008-01-22 15:19:162楼 得分:0
如果我想判断一个地址是否在一个ip范围之内呢?
例如我想判断     10.40.10.5   是否在   10.40.10.5-10.40.50.0之间该如何判断呢?
单纯用inet_addr转换得到的数判断是不行的吧
发表于:2008-01-22 15:32:413楼 得分:0
为什么不行呢?
发表于:2008-01-22 15:54:334楼 得分:0
我想大概是因为10.40.50.0这个ip最后一位是.0的缘故吧。

在网上搜了一下,也有人写可以把   in_addr::s_addr那来判断是否为ip段区间的,但就我上面提到的例子,得到的结果就是错的。    

10.10.10.0     inet_addr转完的值为       657930
10.40.50.0     inet_addr转完的值为       3287050
10.10.10.5     inet_addr转完的值为       84544010

发表于:2008-01-22 15:57:515楼 得分:0
大小头字节序转换一下再用。
发表于:2008-01-22 16:00:076楼 得分:0
c/c++ code
#include <string.h> #include <winsock2.h> #include <stdio.h> #pragma comment(lib,"wsock32.lib") #pragma comment(lib,"ws2_32.lib") int main(void) ...{ char* sip="192.168.0.1";//起始ip char* dip="192.168.0.10";//末尾ip char* ip="192.168.0.14";//待判断的ip in_addr ssip,ddip,iip; ssip.s_addr=inet_addr(sip); ddip.s_addr=inet_addr(dip); iip.s_addr=inet_addr(ip); //通过in_addr结构中的u_long型s_addr参数来比较 if(ssip.s_addr<=iip.s_addr && ddip.s_addr>=iip.s_addr) ...{ printf("the ip: %s is between %s and %s ", ip, sip, dip); } else ...{ printf("the ip: %s is out of range. ", ip); } return 0;


例如这是网上可以找到的一种方法,实际用的就是inet_addr返回值来做计算。     但这应该是错的吧,比如我上面说的地址判断就不对不是么
发表于:2008-01-22 16:04:007楼 得分:0
多谢,其实我也想到这个问题了,就是没自己动手去尝试一下,另外也是对此理解不够深。   十分感谢


快速检索

最新资讯
热门点击