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