找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2653|回复: 11

[其它] 请教一下ip掩码换算

[复制链接]
发表于 2007-2-11 03:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
经常能看到论坛有各种所谓电信、网通ip表之类的东西,也不是说不好,反正不是自己动手的信任度还是比较低。
这段时间刚好要琢磨境外ip路由的问题,这会想偷懒都不行了,因为论坛里的不是电信就是网通,反正没有另外列出境外ip.............
抓了一个纯真ip库,导出的格式是类似这样
----------------------------------------------------------------------
24.42.64.0      24.42.98.255    加拿大  
24.42.99.0      24.42.99.255    加拿大 渥太华
24.42.100.0     24.42.158.255   加拿大  
24.42.159.0     24.42.159.255   加拿大 安省士嘉堡
24.42.160.0     24.43.4.255     加拿大  
----------------------------------------------------------------------
于是想偷懒写个程序直接“勾兑”出来,问题就来了....要怎样才能换算成掩码呢?

需要一个公式,已知ip段头尾,怎计算出这些掩码?

P.S:不用告诉我怎算,我知道怎算,问题是这些ip段不规则。
routeros
发表于 2007-2-11 09:21:29 | 显示全部楼层
http://bbs.routerclub.com/viewth ... hlight=%D1%DA%C2%EB


24.42.64.0      24.42.98.255    加拿大  
24.42.99.0      24.42.99.255    加拿大 渥太华
24.42.100.0     24.42.158.255   加拿大  
24.42.159.0     24.42.159.255   加拿大 安省士嘉堡
24.42.160.0     24.43.4.255     加拿大  

晕他们是连续的
24.42.64.0-24.43.4.255
24.42.64.0/19
24.43.0.0/22
24.43.4.0/24

[ 本帖最后由 lsq726 于 2007-2-11 09:26 编辑 ]
routeros
回复

使用道具 举报

发表于 2007-2-11 11:48:06 | 显示全部楼层
按行来算的话没办法计算掩码,不符合规则
ros不是自动就将符合要求的地址长度进行转化了吗
routeros
回复

使用道具 举报

 楼主| 发表于 2007-2-11 15:26:32 | 显示全部楼层
我知道按照那个文本的行来换算的话是肯定没可能的,这也正是我需要求助的地方,我所期望的,当然就是如下的例子....例如把24.42.64.0-24.43.4.255换算成24.42.64.0/19,24.43.0.0/22,24.43.4.0/24。这个要是做好,以后编辑ip路由表就方便很多了。

原帖由 lsq726 于 2007-2-11 09:21 发表
24.42.64.0-24.43.4.255
24.42.64.0/19
24.43.0.0/22
24.43.4.0/24
routeros
回复

使用道具 举报

发表于 2007-2-11 15:49:20 | 显示全部楼层
找我啊,哈哈,我11月的时候就从APNIC那里弄了所有的电信IP出来了
routeros
回复

使用道具 举报

发表于 2007-2-11 15:57:23 | 显示全部楼层
1、计算出有多少个IP
2、根据数量计算出掩码!
routeros
回复

使用道具 举报

 楼主| 发表于 2007-2-11 16:14:37 | 显示全部楼层
原帖由 专卖精品 于 2007-2-11 15:49 发表
找我啊,哈哈,我11月的时候就从APNIC那里弄了所有的电信IP出来了


关键是,我现在要捣弄的是境外ip..........我知道怎算,用手算我可以算出来,问题是,不知道应该怎转换成算式让程序算。
routeros
回复

使用道具 举报

发表于 2007-2-11 16:15:23 | 显示全部楼层
原帖由 seignior 于 2007-2-11 16:14 发表


关键是,我现在要捣弄的是境外ip..........我知道怎算,用手算我可以算出来,问题是,不知道应该怎转换成算式让程序算。


用EXCEL啊,回头谈,呵呵
routeros
回复

使用道具 举报

 楼主| 发表于 2007-2-11 16:25:55 | 显示全部楼层
我自己能写些小程序,但却不懂excel+_+"
之前用程序砍电信网通铁通ip,30万行原始数据,砍了快10个小时才把电信网通铁通ip删除完........excel这些vbs脚本就算了吧。
routeros
回复

使用道具 举报

发表于 2007-2-11 16:40:26 | 显示全部楼层
我上次用的方法是:
1、先把IP分开,比如192.168.0.1分成192 168 0 1,然后用后面的IP减去前面的IP,分别得到4个数值,比如192.168.0.0-192.168.255.255,计算后可以得到0 0 255 255这样4个值,然后每个数值加1,得到1 1 256 256,最后把所有的数值相乘,得到的就是一共的IP数量,这个看起来复杂,其实在EXCEL里面编好公式就行了,还是很简单的
2、得到的数值(比如上面是得到65536),进行对数运算(LN65536/LN2),得到16,最后用32-16=16,这个最后的16就是掩码

关键是第一部的数值分离要用点技巧,后面的计算就直接可以用EXCEL的公式完成,还是很简单的,哈哈,如果还是没有搞定,你把表给我,我帮你弄,只要数量不是太多,半小时是肯定可以了!
routeros
回复

使用道具 举报

发表于 2007-2-11 17:32:50 | 显示全部楼层
大体思路如下,可能局部不太严谨,年底太忙,时间不太够,哈哈,多谅解

if smalladd-bigadd>0 then swap(smalladd,bigadd)
do while bigadd-smalladd=0
    smallnetwork=smalladd
    smallallowadd = f(smallnetwork)//通过循环找到小地址的本网段所允许的最大网段(或简单换成二进制从右边数0的个数也行)
    if bigadd>smallallownetwork then   //最大的值还不够大,此时需要超网计算
        print smallallownetwork        //这个网段已经达到最大,因此可以输出了
        smalladd = newbing(smalladd,smallallownetwork)         //通过smallallownetwork可以计算出下一个启始网段
    else    //此时需要进行子网计算,
        
        smallallownetwork = g(smallnetwork)//通过循环找到小地址的小一级子网所允许的最大网段
        print smallallownetwork        //值合适则输出
        smalladd = newsmall(smalladd)         //通过smallallownetwork可以计算出下一个启始网段

    end if
loop

[ 本帖最后由 parphy 于 2007-2-12 08:47 编辑 ]
routeros
回复

使用道具 举报

发表于 2007-2-11 17:36:25 | 显示全部楼层
补充:
前提:是地址必须连续
难点:无非就是有些段是超网(这里的超网概念不是严格意义上的,而是指超过最大子网范围的网段),有些段是子网,这地方容易走弯路(前面楼上给的提示就是)
方法比较笨,但思路是可行的,多用二进制会大大提高计算效率,1000行,1分钟内应该可以计算完

举个简单例子说明思路:
24.42.61.0-24.43.4.255
循环序号得到网段(可输出)广播地址(可输出)下一网段
024.42.61.0/2424.42.61.255 24.42.62.0/23
124.42.62.0/2324.42.63.25524.42.64.0/18
224.42.64.0/1824.62.127.25524.42.128.0/17
324.42.128.0/1724.62.255.25524.43.0.0/16
424.43.0.0/2224.63.3.25524.43.4.0/22
524.43.4.0/2424.43.4.255bigadd-smalladd=0,循环结束
为什么不用减法计算?
1、如果有退位,对数组来说算法反而增加麻烦
2、起始点如果不为0,则差值固定的情况下,不同的匹配有不同的结果,如果再算匹配,则本思路的整体思路其实就可以完全等同匹配算法,结果就是,绕了一大圈又回来了,搞不好,还可能需要重新合并得到的网段数组(虽然不合并也可以用)
3、本算法可以应付任意连续IP地址,属于非常直接易看懂的方式,得到的网段数也最精简。

[ 本帖最后由 parphy 于 2007-2-12 09:16 编辑 ]
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-9-30 05:35 , Processed in 0.109710 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表