Home > Database > Mysql Tutorial > Oracle中IP地址和掩码转换成CIDR格式

Oracle中IP地址和掩码转换成CIDR格式

WBOY
Release: 2016-06-07 17:23:43
Original
1384 people have browsed it

遇到的问题如下:数据库中存储了IP地址,以及IP地址掩码,需要将他们转化成CIDR格式的,并且不仅仅是将掩码转化成CIDR对应的数字的

遇到的问题如下:数据库中存储了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; 

linux

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template