IPv6地址存储
import java.util.Arrays; /**
* @author: 何其有静
* @date: 2019/4/2
* @description: IPv6地址存储
* https://mp.weixin.qq.com/s/h1F2KKaoa-1OweKuC-0cXA
*/
public class CommonIp { public static void main(String[] args) {
String[] ips4Test = new String[]{"FFFF:FFFF:7654:FEDA:1245:BA98:3210:4562",
"FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", "7654:0:FFFF:7654:562:222:7622:0", "0:0:0:0:0:0:0:0"};
for (String testCase : ips4Test) {
test(testCase);
}
} private static void test(String testCase) {
long[] ipv6 = ip2Longs(testCase);
String ipString = longs2Ip(ipv6);
boolean eq = testCase.equalsIgnoreCase(ipString);
System.out.println("本次测试 ipv6 地址: " + testCase + ", 转为 long 数组: " + Arrays.toString(ipv6)
+ ", 再转回 ipv6 字符串: " + ipString + ", 是否与原字符串相等: " + eq);
if (!eq) {
throw new IllegalStateException("本次测试未通过!testCase: " + testCase);
}
} /**
* 将 IPv6 地址转为 long 数组,只支持冒分十六进制表示法
*/
public static long[] ip2Longs(String ipString) {
if (ipString == null || ipString.isEmpty()) {
throw new IllegalArgumentException("ipString cannot be null.");
}
String[] ipSlices = ipString.split(":");
if (ipSlices.length != 8) {
throw new IllegalArgumentException(ipString + " is not an ipv6 address.");
}
long[] ipv6 = new long[2];
for (int i = 0; i < 8; i++) {
String slice = ipSlices[i];
// 以 16 进制解析
long num = Long.parseLong(slice, 16);
// 每组 16 位
long right = num << (16 * i);
// 每个 long 保存四组,i >> 2 = i / 4
ipv6[i >> 2] |= right;
// a|=b的意思就是把a和b按位或然后赋值给a 按位或的意思就是先把a和b都换成2进制,然后用或操作,相当于a=a|b
}
return ipv6;
}
public static String longs2Ip(long[] numbers) {
if (numbers == null || numbers.length != 2) {
throw new IllegalArgumentException(Arrays.toString(numbers) + " is not an IPv6 address.");
}
StringBuilder sb = new StringBuilder(32);
for (long numSlice : numbers) {
// 每个 long 保存四组
for (int j = 0; j < 4; j++) {
// 取最后 16 位
long current = numSlice & 0xFFFF;
sb.append(Long.toString(current, 16)).append(":");
// 右移 16 位,即去除掉已经处理过的 16 位
numSlice >>= 16;
}
}
// 去掉最后的 :
return sb.substring(0, sb.length() - 1);
}
}
IPv6地址存储的更多相关文章
- PHP中有关IPV4 和IPV6地址转换以及其它一些常见问题
这里主要介绍一下 IPV4 / IPV6 在 PHP / MySQL 中如何转换.以及中间容易碰到的一些问题. 首先介绍两个函数: ip2long:将 IPV4 的字符串互联网协议转换成长整型数字 i ...
- 网络支持IPV6地址测试校验与思考
概述 大背景:随着移动端的快速扩张,互联网的规模越来越广阔,早于2011年耗尽的IPV4地址越来越无法满足互联网的网络地址需求,IPV6地址推广进入快车道.实际情况:近期公司应上级部门邀请对公司的主域 ...
- win10 localhost 解析为 ipv6地址 ::1 的解决办法
今天遇到个奇怪的问题,localhost 访问时提示 not found 404,但是有127.0.0.1可以访问.最后找到原因,是因为 windows 把 localhost 解析为 ipv6 地址 ...
- IP地址(IPv4)/IPv6地址的正则表达式
原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...
- IPv6地址介绍
IPv6地址介绍 2008 年 04 月 10 日 1. 认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示:而IPv6 ...
- Ajax请求中带有IPv6地址后的百分号的问题
IPv6地址后的百分号: 对于连入网络但没有IPv6路由器或DHCPv6服务器的IPv6客户端,它们始终使用fe80::/64链路本地网络地址.如果运行Windows的计算机中有多个网络适配器连接到不 ...
- 6.ipv6地址配置
1. "nmcli connection modify 网卡名 ipv4.addresses "ipv6地址" ipv6.method manual ". 2. ...
- 是一个IPV6地址
每次在VS上调试,发现本机地址是 ::1 这种就不解.由于太忙而没关注,今天看了IPV6的文章才明白.原来这是个IPV6地址,也就是本机环回地址.以前是127.0.0.1,IPV4版本,而IPV6的就 ...
- IPv6地址的ping、telnet等操作
最近在研究https协议是如何传输数据的,用wireshark抓包分析,发现客户机和google网站在传输数据时使用了IPv6地址,于是相对ipv6地址测试下基本的功能. ping功能,直接使用pin ...
随机推荐
- idea中的springboot项目如何不用重新编译,自动热部署
两步走:引入依赖,配置idea 在pom.xml中引入如下依赖,关键字:devtools 第二步,修改idea两处配置 2.1 windows下,ctl+alt+s打开idea配置菜单 左上角输入框搜 ...
- red hat enterprise Linux 64 bit 配置IP
在win7 64位操作系统的台式机器上,安装了VMware® Workstation,9.0.1 build-894247.新建一个虚拟机安装linux.具体过程请搜索相关文档.安装的时候选择的网络连 ...
- JavaWeb配置详解(结合框架SpringMVC)
详解 先说一说常识性的东西,我们的JavaWeb程序运行一开始走的是web.xml文件,这是我们的核心文件,可以说没有web.xml文件我们就无法运行项目,这个文件长什么样子,读者自己新建一个web项 ...
- Tomcat 方式部署 Solo 博客系统总结
此篇为Tomcat部署方式,另有Docker部署方式,请参考文章<Docker 方式部署 Solo 博客系统总结> 一.环境和文件准备 服务器:购买的阿里云服务器,系统为Linux(C ...
- net core Webapi基础工程搭建(六)——数据库操作_Part 1
目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...
- c语言和c++的交换函数
#include<iostream> using namespace std; namespace LiuGang{//在命名空间中写函数 void swap(int&aa,int ...
- webservice接口和http接口(API接口)的区别
web service(SOAP)与HTTP接口的区别: 什么是web service? 答:soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content- ...
- MyBatis的flushCache和useCache的使用注意
之前在利用MyBatis做开发的时候,遇到了一个问题,使用select配置的时候发现前后两次的结果是一样的,并且使用statementType="CALLABLE"配置,然后在配置 ...
- 【JVM从小白学成大佬】4.Java虚拟机何谓垃圾及垃圾回收算法
在Java中内存是由虚拟机自动管理的,虚拟机在内存中划出一片区域,作为满足程序内存分配请求的空间.内存的创建仍然是由程序猿来显示指定的,但是对象的释放却对程序猿是透明的.就是解放了程序猿手动回收内存的 ...
- 企查查app (完结)
在经历前两次探索之后,终于可以把所有的加密关键参数搞定了. 已删除!!!! 好了现在基本结束了. 根据这个我写了一自动抓取企查查每日新增数据,需要的话可以去看看 企查查app新增企业数据抓取 关注小白 ...