ip匹配问题

add_oil 2012-04-16 09:33:19
如果有一个ip库 里面是由 beginip endip 组成的ip段 已知有一个ip 192.168.198.10 怎样匹配从这个ip属于哪个段?
...全文
227 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
nice_cxf 2012-04-17
  • 打赏
  • 举报
回复
哦,还要网络字节序为本机字节序,
l1= ntohl(inet_addr("10.0.0.1"));
以下都要这样就可以了
add_oil 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
192.168.0.0不是一个有效的地址,最后一个应该是1,同样类似192.168.0.255也是不行的,如果你的数据库里这种数据太多要做对应的修改
[/Quote]
l1= inet_addr("10.0.0.1");
l2 = inet_addr("10.0.1.1");
l3 = inet_addr("10.0.0.224");
的话是一样的啊 输出的结果l3 怎样判断是不是在l1 到l2的范围?
nice_cxf 2012-04-17
  • 打赏
  • 举报
回复
192.168.0.0不是一个有效的地址,最后一个应该是1,同样类似192.168.0.255也是不行的,如果你的数据库里这种数据太多要做对应的修改
add_oil 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
用inet_addr都转成unsigned int,然后比较就是了,
[/Quote]
int main(int argc, char* argv[])
{
struct in_addr addr1,addr2;
unsigned long l1,l2,l3;
l1= inet_addr("192.168.0.0");
l2 = inet_addr("192.168.1.0");
l3 = inet_addr("192.168.0.222");
printf("%lu\n",l1);
printf("%lu\n",l2);
printf("%lu\n",l3);
}

不能说出问题咯 输出的 l3都不是在那个范围内??

nice_cxf 2012-04-16
  • 打赏
  • 举报
回复
如果你愿意,字符串比较也可以,不过要把.1等等的换成.001也就是说都必须3位,你自己选择把
evencoming 2012-04-16
  • 打赏
  • 举报
回复
自己写一个比较函数。。。
int ip1,ip2,ip3,ip4;
fscanf(fp,"%d.%d.%d.%d",ip1,ip2,ip3,ip4);
...
然后,如果是顺序存放的,只需要毕竟边界值。
否则, 全部取出来,放内存里面,排序之后比较。
luciferisnotsatan 2012-04-16
  • 打赏
  • 举报
回复
unsigned long inet_addr( const char* cp);

不转int,比字符串,更麻烦。
add_oil 2012-04-16
  • 打赏
  • 举报
回复
因为要把一个库是以txt文档保存的 要把所有的转为int的 很麻烦吧
add_oil 2012-04-16
  • 打赏
  • 举报
回复
还有没有其他方法呢
luciferisnotsatan 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
引用 2 楼 的回复:

用inet_addr都转成unsigned int,然后比较就是了,

++

举例说下 能否
[/Quote]
查下msdn不就知道了?
add_oil 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:

用inet_addr都转成unsigned int,然后比较就是了,

++
[/Quote]
举例说下 能否
缺媳妇的郝 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

用inet_addr都转成unsigned int,然后比较就是了,
[/Quote]
++
add_oil 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
是 ip段是有序的吗?
如果是,直接换成 unsigned int,看是不是哪个范围内。
[/Quote]
能否举例说明下
nice_cxf 2012-04-16
  • 打赏
  • 举报
回复
用inet_addr都转成unsigned int,然后比较就是了,
evencoming 2012-04-16
  • 打赏
  • 举报
回复
是 ip段是有序的吗?
如果是,直接换成 unsigned int,看是不是哪个范围内。
add_oil 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
引用 14 楼 的回复:

引用 13 楼 的回复:
引用 12 楼 的回复:

如果全部用int 比较的话 太麻烦了 准备用 ip+mask 方法 mask 是数量? 这样ok不

这样你不还是要转int?奇怪了转换只是用个系统函数而已,就这你就嫌麻烦?

对了 我转为int 是用A*256*256*256+B*256*256+C*256+D 这个哦 你说的系统函数是哪个?
……
[/Quote]
ok
nice_cxf 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:
引用 12 楼 的回复:

如果全部用int 比较的话 太麻烦了 准备用 ip+mask 方法 mask 是数量? 这样ok不

这样你不还是要转int?奇怪了转换只是用个系统函数而已,就这你就嫌麻烦?

对了 我转为int 是用A*256*256*256+B*256*256+C*256+D 这个哦 你说的系统函数是哪个?
[/Quote]
不仔细看回帖的么?2楼就给你了
add_oil 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
引用 12 楼 的回复:

如果全部用int 比较的话 太麻烦了 准备用 ip+mask 方法 mask 是数量? 这样ok不

这样你不还是要转int?奇怪了转换只是用个系统函数而已,就这你就嫌麻烦?
[/Quote]
对了 我转为int 是用A*256*256*256+B*256*256+C*256+D 这个哦 你说的系统函数是哪个?
nice_cxf 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

如果全部用int 比较的话 太麻烦了 准备用 ip+mask 方法 mask 是数量? 这样ok不
[/Quote]
这样你不还是要转int?奇怪了转换只是用个系统函数而已,就这你就嫌麻烦?

add_oil 2012-04-16
  • 打赏
  • 举报
回复
如果全部用int 比较的话 太麻烦了 准备用 ip+mask 方法 mask 是数量? 这样ok不

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧