遇到的问题如下:数据库中存储了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
Sql代码
select inttoip(BITAND(dottedQuadToNumber('58.247.221.238'),
ottedQuadToNumber('255.255.255.252'))) from dual
附: 将字符串转成数字的函数:
Sql代码
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地址的函数:
Sql代码
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;
- 大小: 31.8 KB
分享到:
相关推荐
shell实现netmask掩码和cidr掩码位转换1
ip地址掩码,反掩码转换。软件支持将掩码长度转换为掩码或反掩码。
实现批量的IP地址,或地址段的排序并按照CIDR格式最小化聚合。 需要聚合的IP段放在ip.list文件中,聚合后的IP在文件new_ip.list # 按照序号循环IP列表 for i in range(len(IpIntList)): # 前一个IP prev_ip = ...
根据网段ip和掩码自动计算ip段,ip相关操作基础类。包括:根据 ip/掩码位 计算IP段的起始IP;根据 ip/掩码位 计算IP段的终止IP;计算子网大小等。
打包两个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地址和子网掩码详解
c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;可以实现linux下的time_t和字符串的相互转换。
本程序可以手动设置IP 地址等参数也可以自动获取IP地址的功能,希望对大家有所帮助
计算IP地址掩码,主机位数的小工具,支持10进制到2进制的转换.