Oracle中IP地址和掩码转换成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;

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-02 18:34:42

Oracle中IP地址和掩码转换成CIDR格式的相关文章

Python中IP地址处理IPy模块的使用详解

IPy模块可以很好的帮助我们完成IP的计算和规划.现在网上也有很多IP地址计算的网站,这个模块实现的功能和他们也差不多. 安装 先下载源码,地址:ps://pypi.python.org/pypi/IPy/">https://pypi.python.org/pypi/IPy/ ,然后解压后使用命令python setup.py install安装. 使用 1.显示IP类型 >>> IP('192.168.1.1').version()  4  >>> I

TP-LINK路由器防火墙如何设置中IP地址过滤

  TP-LINK路由器防火墙设置中IP地址过滤的方法 首先必须找到需要过滤哪些IP地址,我们通过下面的方法得到需要过滤的登陆服务器的IP地址. 小编就用QQ来举例吧.当QQ登陆成功后,进入QQ设置. 点击"网络连接",查看"登录服务器",这里显示的IP地址就是我们要过滤的IP地址. 然后我们就开始设置IP地址过滤. 注意这里选择的缺省过滤规则是.凡是不符合已设IP地址过滤规则的数据包,允许通过本路由器. 由于QQ登陆时可能会重定向IP地址,所以我们在找到一个登陆I

excel数据-excel中使用kutools将图片从tif转换成jpg格式后图片序列改变了,怎么破?

问题描述 excel中使用kutools将图片从tif转换成jpg格式后图片序列改变了,怎么破? 办公时excel中有大量的图片需要从tif转成jpg格式,使用kutools可以迅速直接转换格式,但是导回excel中时图片顺序发生改变. 是否有什么编程语言或者改变转换图片格式的软件也可以,解决这个问题? 非常感谢!

无线网络中IP地址冲突故障的解决

在一些无线网络中,由于客户机数目较多,为方便对这些机器进行管理,很多管理员会使用无线路由器提供的DHCP服务,为客户机提供TCP/IP参数配置,如IP地址.网关地址和DNS服务器等.但如果你的无线网络中,有些电脑必须手工指定TCP/IP参数配置,这时DHCP服务器提供的动态IP地址和手工指定的静态IP地址共存,如果你没有合理配置无线路由器中DHCP服务器的参数,就会很容易造成IP地址冲突. 冲突如何产生? 如笔者管理的一个无线网络,有50台电脑,其中有5台电脑由于特殊需要,使用了手工设置静态IP

[华为机试练习题]34.识别有效的IP地址和掩码并进行分类统计

题目 描述: 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.255.255.255; B类地址128.0.0.0~191.255.255.255; C类地址192.0.0.0~223.255.255.255; D类地址224.0.0.0~239.255.255.255: E类地址240.0.0.0~255.255.255.255 私网IP范围是: 10.0

ios-OC中怎样将UTF8编码转换成中文

问题描述 OC中怎样将UTF8编码转换成中文 如题:有一个Person类,里面重写了description方法,实现返回姓名,年龄等信息.这样我可以直接通过NSLog(@""%@""per); 来输出对象信息.但是如果我把对象存入数组中,然后输出数组:NSLog(@""%@"" array);这样输出的结果都是UTF8编码.如果对象per内部的信息是因为和数字的话结果不受影响,如果是中文的话输出的就是UTF8.这是为什么呢?如

C#将image中的显示的图片转换成二进制

原文:C#将image中的显示的图片转换成二进制  1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中. View Code //将本地图片转换成二进制保存起来 private byte[] SetImageToByteArray(string fileName) { FileStream fs = null; try { fs = new FileStream(fileName, FileM

responsebody-求springmvc中的@ResponseBody怎么配置,才能将自定义的po类转换成json格式

问题描述 求springmvc中的@ResponseBody怎么配置,才能将自定义的po类转换成json格式 在springmvc中,我想通过@ResponseBody的方式来返回json格式的数据,在mvc:annotation-driven/mvc:annotation-driven中应该怎么配置,网上找了很久没找到,我用的sprin版本是4.2.5的 我的Controller是这样的 前台的js是这么写的 在这个配置文件里面是不是还要配置一下啊?具体怎么配置,求教一下,小弟感激不尽. 解决

python中,怎么在不转换成矩阵的情况下根据txt文件的某一列大小排序?

问题描述 python中,怎么在不转换成矩阵的情况下根据txt文件的某一列大小排序? python中,怎么在不转换成矩阵的情况下根据txt文件的某一列大小排序? 而且好像都是按行进行split的,我想操作的对象是列,1先按一列排序,2再提取两列,这两个都不知道该怎么做 解决方案 http://zhidao.baidu.com/link?url=sKzE1u-i3iTwADOH0IZtNcAgQAMRHE10S-_VIxUTxj7we1cglIaMCSSY_KDC6dpNYTrihBZ5GROHY