遇到的问题如下:数据库中存储了IP地址,以及IP地址掩码,需要将他们转化成CIDR格式的,并且不仅仅是将掩码转化成CIDR对应的数字的问题,需要将原有的IP地址转化成对应的网络地址,例如IP地址是58.247.221.238,掩码是255.255.255.252,需要将其转化为58.247.221.236/30。
解决方案:我们知道,将IP地址和掩码通过位与函数就能得到对应的网络地址.Google一下,找到了将IPv4地址转成数字以及转化回来的函数。有了这两个函数,再利用oracle 自带的bitand函数,问题就解决了。可以先将IP地址和掩码通过字符串转IP的函数转成数字,然后通过位与运算就能得到相应的网络地址对应的数字,再通过数字转字符串的功能,即得到对应的网络地址。至于/后面CIDR的数字,可以通过导入一张掩码和CIDR数字的对应表得到,不在详述.
实际例子如下: 返回58.247.221.236
select inttoip(BITAND(dottedQuadToNumber('58.247.221.238'),
dottedQuadToNumber('255.255.255.252'))) from dual
附: 将字符串转成数字的函数:
CREATE OR REPLACE function dottedQuadToNumber ( dottedQuad IN VARCHAR2) return number is
Result NUMBER;
begin
Result:= (substr(dottedQuad ,
1,
(instr(dottedQuad , '.', 1, 1 ) - 1))
* 256 * 256 * 256
) +
(substr(dottedQuad ,
instr(dottedQuad , '.', 1, 1 ) + 1,
instr(dottedQuad , '.', 1, 2 ) -
instr(dottedQuad , '.', 1, 1 ) - 1) * 256 * 256
) +
(substr(dottedQuad ,
instr(dottedQuad , '.', 1, 2 ) + 1,
instr(dottedQuad , '.', 1, 3 ) -
instr(dottedQuad , '.', 1, 2 ) - 1) * 256
) +
(substr(dottedQuad ,
instr(dottedQuad , '.', 1, 3 ) + 1)
) ;
return(Result );
end dottedQuadToNumber ;
数字转成ip地址的函数:
CREATE OR REPLACE function inttoip(ip_address integer) return varchar2
deterministic
is
begin
return to_char(mod(trunc(ip_address /256/ 256/256 ),256))
|| '.'|| to_char(mod(trunc(ip_address/ 256/256 ),256))
|| '.'|| to_char(mod(trunc(ip_address/ 256),256 ))
|| '.'|| to_char(mod(ip_address, 256));
end;
分享到:
相关推荐
遇到的问题如下:数据库中存储了IP地址,以及IP地址掩码,需要将他们转化成CIDR格式的,并且不仅仅是将掩码转化成CIDR对应的数字的问题,需要将原有的IP地址转化成对应的网络地址,例如IP地址是58.247.221.238,掩码...
shell实现netmask掩码和cidr掩码位转换1
ip地址掩码,反掩码转换。软件支持将掩码长度转换为掩码或反掩码。
根据网段ip和掩码自动计算ip段,ip相关操作基础类。包括:根据 ip/掩码位 计算IP段的起始IP;根据 ip/掩码位 计算IP段的终止IP;计算子网大小等。
实现批量的IP地址,或地址段的排序并按照CIDR格式最小化聚合。 需要聚合的IP段放在ip.list文件中,聚合后的IP在文件new_ip.list # 按照序号循环IP列表 for i in range(len(IpIntList)): # 前一个IP prev_ip = ...
c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;可以实现linux下的time_t和字符串的相互转换。
打包两个IP地址子网掩码计算器,非常实用一个小工具,两个加起来才700K噢
用js实现通过ip和子网掩码计算出网络地址
计算IP地址和掩码计算器 子网计算工具 1.1.exe
VC 在不重启电脑的情况下修改本机IP地址、掩码以及网关,可以使用GetAdaptersInfo来取得网卡信息,但其显示的名称不是很具体,大家似乎觉得奇怪,修改这些似乎就不需要重启电脑吧?对,不过本程序当时写的时候是适用...
C#实现得到本机的IP、子网掩码和网关地址C#实现得到本机的IP、子网掩码和网关地址
于IP地址与子网掩码的学习心得,对于计算机网络的学习很有用
IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算IP地址 子网掩码 计算
进行ip地址计算,算出子网数量、地址范围、网络号等
IP地址与子网掩码 详细的说明了 IP地址与子网掩码之间的关系,换算方法 适合网络基础者学习参考用
PLC通信中的IP地址和子网掩码详解
计算IP地址掩码,主机位数的小工具,支持10进制到2进制的转换.
知IP地址和子网掩码_求另外六项