快速业务通道

使用Java开发兼容IPv6的网络应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
:1428:57ab 2001:0DB8:0::0:1428:57ab 2001:0DB8::1428:57ab

都是合法的地址,并且他们是等价的。但 2001::25de::cade 是非法的。(因 为这样会使得搞不清楚每个压缩中有几个全零的分组)。同时前导的零可以省略 ,因此:2001:0DB8:02de::0e13 等于 2001:DB8:2de::e13。

使用Java开发兼容IPv6的网络应用程序(3)

时间:2011-09-04 IBM 朱益盛 杨晖 傅啸

IPv6 地址校验

IPv4 地址可以很容易的转化为 IPv6 格式。举例来说,如果 IPv4 的一个地 址为 135.75.43.52(十六进制为 0x874B2B34),它可以被转化为 0000:0000:0000:0000:0000:0000:874B:2B34 或者::874B:2B34。同时,还可以 使用混合符号(IPv4- compatible address),则地址可以为::135.75.43.52。

在 IPv6 的环境下开发 Java 应用,或者移植已有的 IPv4 环境下开发的 Java 应用到 IPv6 环境中来,对于 IPv6 网络地址的验证是必须的步骤,尤其是 对那些提供了 UI(用户接口)的 Java 应用。

所幸的是,从 Java 1.5 开始,Sun 就增加了对 IPv6 网络地址校验的 Java 支持。程序员可以通过简单地调用方法 sun.net.util.IPAddressUtil.isIPv6LiteralAddress() 来验证一个 String 类 型的输入是否是一个合法的 IPv6 网络地址。

为了更深入一步地了解 IPv6 的网络地址规范,及其验证算法,笔者参阅了一 些材料,包括上文所述的方法 sun.net.util.IPAddressUtil.isIPv6LiteralAddress() 的源代码,以及目前网 络上流传的一些 IPv6 网络地址的正则表达式,发现:

由于 IPv6 协议所允许的网络地址格式较多,规范较宽松(例如零压缩地址, IPv4 映射地址等),所以导致了 IPv6 网络地址的格式变化很大。

Java 对于 IPv6 网络地址的验证是通过对输入字符的循环匹配做到的,并没 有采取正则表达式的做法。其匹配过程中还依赖于其它的 Java 方法。

目前网络上流传的 IPv6 网络地址验证的正则表达式通常都只能涵盖部分地址 格式,而且表达式冗长难读,非常不易于理解。

基于通用性考虑,以及为了使验证方法尽量简单易读,笔者尝试将 IPv6 网络 地址的格式简单分类以后,使用多个正则表达式进行验证。

这种做法兼顾了通用性(基于正则表达式,所以方便用各种不同的编程语言进 行实现),以及易读性(每个独立的正则表达式相对简短);并且根据测试,支 持目前所有的 IPv6 网络地址格式类型,尚未发现例外。

以下是笔者用 Java 编写的对于 IPv6 网络地址的验证方法。此算法可被简单 地用其它编程语言仿照重写。

清单 1. 验证地址

//IPv6 address validator matches these IPv6 formats //::ffff:21:7.8.9.221 | 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 //| ::8a2e:0:0370:7344 |  2001:0db8:85a3:08d3:1319:8a2e:100.22.44.55 //| 2001:0db8::8a2e:100.22.44.55 | ::100.22.44.55 | ffff:: //And such addresses are invalid //::8a2e:0:0370:7344.4 | 2001:idb8::111:7.8.9.111 |  2001::100.a2.44.55 //| :2001::100.22.44.55 public static boolean isIPV6Format(String ip) {    ip = ip.trim();    //in many cases such as URLs, IPv6 addresses are  wrapped by []    if(ip.substring(0, 1).equals("[") && ip.substring (ip.length()-1).equals("]"))      ip = ip.substring(1, ip.length()-1);      return (1 < Pattern.compile(":").split(ip).length)     //a valid IPv6 address should contains no less than  1,     //and no more than 7 “:” as separators        && (Pattern.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号