ip转数字实现范围查询(ipv4,ipv6)

ipv4可转成long已经由来已久,对于ipv6因为需要用两个long的大小存储所以转成了BigInteger,数据库中ipv6存成binary类型,可以用between 方式实现范围查询,

因ipv4转成的long也可调用ipv6的转v6方法,所以为避免v4与v6存储冲突,ipv6存储时建议在转为的数值加上ipv4的最大值(255.255.255.255见示例中的maxIPv4Number),当然在转回ipv6字符前,需要再减去这个ipv4最大值,

这样可以在执行范围查询时避免ipv6规则查出ipv4的记录

public class IPTransfer {

    public static BigInteger maxIPv4Number = BigInteger.valueOf(4294967295L);//255.255.255.255

    private static final long PART1 = 0xff000000;
    private static final long PART2 = 0xff0000;
    private static final long PART3 = 0xff00;
    private static final long PART4 = 0xff;

    /** 将IP地址长整型数值转化为IPv4字符串 */
    public static String longToIPv4(long ip) {
        String ipStr = String.valueOf((ip & PART1) >> 24);
        ipStr += "." + ((ip & PART2) >> 16);
        ipStr += "." + ((ip & PART3) >> 8);
        ipStr += "." + (ip & PART4);
        return ipStr;
    }

    /** 将IPv4字符串转化为对应的长整型整数 */
    public static long ipv4ToLong(String ipv4) {
        String[] p4 = ipv4.split("\\.");
        long ipInt = 0;
        long part = Long.valueOf(p4[0]);
        ipInt = ipInt | (part << 24);
        part = Long.valueOf(p4[1]);
        ipInt = ipInt | (part << 16);
        part = Long.valueOf(p4[2]);
        ipInt = ipInt | (part << 8);
        part = Long.valueOf(p4[3]);
        ipInt = ipInt | (part);
        return ipInt;
    }

    public static BigInteger ipv6ToNumber(String addr) {
        try {
            InetAddress ia = InetAddress.getByName(addr);
            byte byteArr[] = ia.getAddress();
            return new BigInteger(1, byteArr);
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
    }


    public static String numberToIPv6(BigInteger ipNumber) {
        String ipString ="";
        BigInteger a=new BigInteger("FFFF", 16);

        for (int i=0; i<8; i++) {
            ipString=ipNumber.and(a).toString(16)+":"+ipString;

            ipNumber = ipNumber.shiftRight(16);
        }

        return ipString.substring(0, ipString.length()-1);

    }
}
 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书从介绍IPv4中问题的产生和现状入手,详细阐述了IPv6的各个方面,包括IPv6的寻址结构、扩展头、身份验证和安全性、对任意点播和组播的支持以及对相关协议的影响,同时还探讨了IPv4IPv6过渡的策略和应用。 本书内容由浅入深、语言精练易懂,为有经验的网络管理员和研究人员适应IP升级变化提供了关于IPv6清楚而又与众不同的介绍。 目 录 译者序 前言 第一部分 IP基础知识 第1章 为何要升级IP 1 1.1 IP的影响 1 1.1.1 什么是IP 2 1.1.2 IP应用在哪些地方 3 1.1.3 有多少人在使用IP 3 1.1.4 当IP发生变化时会产生哪些影响 4 1.2 IPv4的局限性及其缺点 4 1.2.1 IP地址空间危机 5 1.2.2 IP性能议题 5 1.2.3 IP安全性议题 6 1.2.4 自动配置 6 1.3 紧迫感 7 第2章 TCP/IP网络互联简介 8 2.1 网络互联问题 8 2.2 分层网络互联模型 9 2.2.1 OSI模型 10 2.2.2 Internet模型 10 2.2.3 封装 11 2.3 IP 12 2.3.1 IP寻址 13 2.3.2 IP头 15 2.3.3 数据报的移 17 2.4 ICMP 18 2.5 选路、传输和应用协议 18 2.5.1 选路协议 19 2.5.2 传输协议 19 2.5.3 应用协议 19 第3章 IPv4的问题 20 3.1 修改还是替换 20 3.2 过渡还是不过渡 26 第4章 通向IPng之路 27 4.1 概念的诞生 27 4.1.1 对Internet将来的估计 27 4.1.2 Internet发展中需要考虑的领域 28 4.2 第一回合 29 4.3 拾遗 31 4.4 IPv6,第一回合 32 4.5 IPv6,第二回合 32 第二部分 IPv6细节 第5章 IPv6的成型 33 5.1 IPv6 33 5.1.1 变化概述 33 5.1.2 包头结构 35 5.1.3 IPv4IPv6的比较 36 5.1.4 流标签 37 5.1.5 业务流类别 37 5.1.6 分段 38 5.1.7 扩展头 39 5.2 ICMPv6 40 第6章 IPv6寻址 43 6.1 地址 43 6.1.1 地址表达方式 43 6.1.2 寻址模型 44 6.1.3 地址空间 45 6.2 地址类型 46 6.2.1 广播路在何方 46 6.2.2 单播 46 6.2.3 单播地址格式 47 6.2.4 组播 51 6.2.5 泛播 53 第7章 IPv6扩展头 54 7.1 扩展头 54 7.2 扩展头的用法 54 7.2.1 扩展头的标识 55 7.2.2 扩展头的顺序 56 7.2.3 建立新的选项 56 7.2.4 选项扩展头 56 7.2.5 选项 57 7.3 逐跳选项 58 7.4 选路头 59 7.5 分段头 59 7.6 目的地选项 60 第8章 IPv6选路 62 8.1 地址对IP网络的影响 62 8.1.1 标识符和定位符 62 8.1.2 地址分配、无缝互操作和网络 拓扑 64 8.2 选路问题 65 第9章 IPv6身份验证和安全性 69 9.1 为IP增加安全性 69 9.1.1 安全性目标 69 9.1.2 RFC 1825及建议的更新 70 9.2 IPsec 70 9.2.1 加密和身份验证算法 71 9.2.2 安全性关联 73 9.2.3 密钥管理 74 9.2.4 实现IPsec 74 9.2.5 隧道模式与透明模式 75 9.3 IPv6安全性头 76 9.3.1 身份验证头 76 9.3.2 封装安全性净荷头 78 第10章 相关的下一代协议 80 10.1 协议的层次 80 10.1.1 应用层 80 10.1.2 传输层 80 10.1.3 链路层 81 10.2 IPv6域名系统扩展 81 10.3 地址解析协议和邻居发现 82 第11章 自动配置和移动IP 84 11.1 IPv6的即插即用 84 11.1.1 状态自动配置与无状态自动 配置 84 11.1.2 IPv6无状态自动配置 85 11.1.3 BOOTP

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值