首页 > 其他分享 >MariaDB 中的 IPv4 地址

MariaDB 中的 IPv4 地址

时间:2023-06-10 23:00:54浏览次数:44  
标签:1.1 地址 ATON IPv4 test sec MariaDB IPV4

mariadb 中的ip地址数据类型引入的较晚,相对于pg来说,本文主要来看下mariadb中的ip数据类型和使用示例。

IPv4 数据类型

从 mariadb 10.10 开始,引入了新的数据类型 INET4,用于存储 IPv4 地址,作为4字节的二进制字符串。

使用演示如下:

MariaDB [test]> create or replace table t1 (a inet4);
Query OK, 0 rows affected (0.032 sec)

MariaDB [test]> INSERT INTO t1 VALUES('0.0.0.0'), ('255.10.0.0'), ('255.255.255.255');
Query OK, 3 rows affected (0.005 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [test]> INSERT INTO t1 VALUES (0xa0000001), (0xf0000000), (0xff000001);
Query OK, 3 rows affected (0.001 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [test]> select hex(a), a from t1;
+----------+-----------------+
| hex(a)   | a               |
+----------+-----------------+
| 00000000 | 0.0.0.0         |
| FF0A0000 | 255.10.0.0      |
| FFFFFFFF | 255.255.255.255 |
| A0000001 | 160.0.0.1       |
| F0000000 | 240.0.0.0       |
| FF000001 | 255.0.0.1       |
+----------+-----------------+
6 rows in set (0.001 sec)

IPv4 函数

mariadb中提供了几个内置函数用于处理ip地址,如 is_ipv4, is_ipv4_compat, is_ipv4_mapped, inet_aton, inet_ntoa ,下面将逐一演示。

is_ipv4

is_ipv4函数用于验证地址有效性,如果表达式是有效的IPv4地址,则返回1,否则返回0。

在确定IPv4地址的有效性方面,IS_IPV4()比INET_ATON()严格,但与INET6_ATON()一样严格。 这意味着如果IS_IPV4返回1,当传递给INET_ATON()时,相同的表达式将始终返回非null结果,但反过来可能不适用。

演示如下:

MariaDB [test]> SELECT IS_IPV4('10.0.1.1');
+---------------------+
| IS_IPV4('10.0.1.1') |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.000 sec)

MariaDB [test]> SELECT IS_IPV4('1110.0.1.1');
+-----------------------+
| IS_IPV4('1110.0.1.1') |
+-----------------------+
|                     0 |
+-----------------------+
1 row in set (0.000 sec)

is_ipv4_compat

如果给定的数字二进制字符串IPv6地址(如INET6_ATON()返回)是ipv4兼容的,则返回1,否则返回0。

演示如下:

MariaDB [test]> SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.1.1'));
+------------------------------------------+
| IS_IPV4_COMPAT(INET6_ATON('::10.0.1.1')) |
+------------------------------------------+
|                                        1 |
+------------------------------------------+
1 row in set (0.000 sec)

MariaDB [test]> SELECT IS_IPV4_COMPAT(INET6_ATON('::48f3::d432:1431:ba23:846f'));
+-----------------------------------------------------------+
| IS_IPV4_COMPAT(INET6_ATON('::48f3::d432:1431:ba23:846f')) |
+-----------------------------------------------------------+
|                                                         0 |
+-----------------------------------------------------------+
1 row in set (0.000 sec)

is_ipv4_mapped

如果给定的数字二进制字符串IPv6地址(如INET6_ATON()返回)是有效的ipv4映射地址,则返回1,否则返回0。

演示如下:

MariaDB [test]> SELECT IS_IPV4_MAPPED(INET6_ATON('::10.0.1.1'));
+------------------------------------------+
| IS_IPV4_MAPPED(INET6_ATON('::10.0.1.1')) |
+------------------------------------------+
|                                        0 |
+------------------------------------------+
1 row in set (0.000 sec)

MariaDB [test]> SELECT IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.1.1'));
+-----------------------------------------------+
| IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.1.1')) |
+-----------------------------------------------+
|                                             1 |
+-----------------------------------------------+
1 row in set (0.000 sec)

inet_aton

给定IPv4网络地址的点分隔四边形表示为字符串,返回一个表示该地址的数值的整数。 地址可以是4字节或8字节地址。 如果无法理解参数,则返回NULL。

演示如下:

MariaDB [test]> SELECT INET_ATON('192.168.1.1');
+--------------------------+
| INET_ATON('192.168.1.1') |
+--------------------------+
|               3232235777 |
+--------------------------+
1 row in set (0.000 sec)

计算过程为:

192 x 256^3 + 168 x 256^2 + 1 x 256 + 1

inet_ntoa

给定一个网络字节顺序(4或8字节)的数字IPv4网络地址,以字符串的形式返回该地址的点分隔四边形表示形式。

演示如下:

MariaDB [test]> SELECT INET_NTOA(3232235777);
+-----------------------+
| INET_NTOA(3232235777) |
+-----------------------+
| 192.168.1.1           |
+-----------------------+
1 row in set (0.000 sec)

小结

本文针对mariadb的ipv4相关内容逐一做了说明及演示。

标签:1.1,地址,ATON,IPv4,test,sec,MariaDB,IPV4
From: https://blog.51cto.com/u_15081581/6456162

相关文章

  • ICT应用解决方案05-IPv6地址配置
    ICT应用解决方案05-IPv6地址配置1IPv6地址配置方式IPv6地址配置的方式可以分为静态配置和动态配置。其中,动态地址配置又可以分为无状态地址自动配置(StatelessAddressAutoconfiguration,SLAAC)和有状态地址自动配置(StatefulAddressAutoconfiguration)1.1IPv6地址自动配置......
  • 大华-海康摄像头地址
    大华海康摄像头地址海康地址rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream说明:username:用户名。例如admin。password:密码。例如12345。ip:为设备IP。例如192.0.0.64。port:端口号默认为554,若为默认可不填写。codec:有h264、MPEG......
  • 【Ubuntu22.04】配置静态IP地址和FTP服务
    ##一、配置静态IP1.使用命令`ipa`查看当前网卡名称,Ubuntu22.04默认网卡为ens33:![](https://img2023.cnblogs.com/blog/3081210/202306/3081210-20230610143107393-250043837.png)2.使用命令`tree/etc/netplan`查看默认网卡配置文件:![](https://img2023.cnblogs.com/blog/......
  • 地址空间以及编译模式
    Linux下32位环境的用户空间内存分布: Linux下64位环境的用户空间内存分布:前面讲到,在64位环境下,虚拟地址虽然占用64位,但只有最低48位有效。故从0000800000000000~FFFF800000000000,棕色FFFF所代表的这十六位就变成了无效区域(未定义)。 程序代码区用来保存函数体的二进制代码......
  • Cache - 虚拟地址 or 物理地址
    参考https://zhuanlan.zhihu.com/p/107096130Cache使用地址判断是否命中,地址使用的是物理地址还是虚拟地址呢?1.VIVT(VirtuallyIndexedVirtuallyTagged)虚拟高速缓存:以虚拟地址作为查找对象。首先虚拟地址给cache,如果命中,则返回数据给cpu,如果未命中,则将虚拟地址通......
  • 值传递与地址传递的区别
    值传递与地址传递的区别#include<stdio.h>intArrayCopy(char*ori,char*cop,charLength){charloop;for(loop=0;loop<Length;loop++){*cop++=*ori++;}return0;}intmain(){charoriginal[10]={1,2,3,4,......
  • 小议Python列表和元组中的元素地址连续性
    众所周知,在Python中字典和集合依赖元素哈希表来存储,并不存在传统意义上的所谓元素“顺序”,当然,如果需要一个有序的字典可以使用collections模块提供的OrderedDict类。在Python中,列表和元组属于有序序列,支持下标随机访问,也支持切片操作。当然,列表是可变序列而元组属于不可变序列,这一......
  • Python使用正则表达式检查合法IP地址
    问题描述:函数main()接收一个任意字符串s作为参数,要求使用正则表达式检查字符串s是否为有效的IPv4地址,也就是由3个圆点分隔的4组十进制数且每组十进制数都介于区间[0,255]。如果字符串s符合要求就返回True,否则返回False。例如,main('0.0.0.0')返回True,main('119.189.876.0')返回False......
  • 基于网卡地址做设备指纹的优缺点
    生成设备指纹的目的是为了能唯一地标识设备,而且这个标识在设备的生命周期内保持稳定。因此,在选择设备特征时,通常需要考虑这些特征的唯一性和稳定性。软件及配置信息一版不适合,是因为这类变化虽然不大,但万一变化后,设备指纹会变,影响使用。比如:操作系统信息:操作系统版本、安装日......
  • VMware克隆虚拟机后修改UUID、MAC地址、IP和主机名
    VMware克隆虚拟机后修改UUID、MAC地址、IP和主机名https://blog.csdn.net/weixin_44657888/article/details/130679813 --------------------------------------------------------设置静态ipcat/etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"PROXY_METHOD......