2016-09-30 67 views
0

我试过apache commons validator和番石榴。这两个库对于其中包含作用域ID(在给定示例中为%15)的IPv6地址返回无效。例如。 fe80 :: 8b2:d61e:e5c:b333%15如何验证具有作用域ID的IPv6?

是否有任何java库认为它是一个有效的IPv6地址?

+0

我还没有找到任何Web应用程序,它能够理解的链路本地地址的范围。 –

回答

1

标准java.net类InetAddress/Inet6Address似乎正确解析它,例如,

InetAddress inet6Address = Inet6Address.getByName("fe80::8b2:d61e:e5c:b333%15"); 

btw。事实上AC(1.5.1)InetAddressValidator和Guava(19.0)InetAddresses似乎在此失败

+0

有趣。听起来像它应该作为每个项目的错误提交。 – chrylis

0

如前所述,标准Java库分析范围并存储它。

此外,open-source IPAddress Java library也支持范围ID。免责声明:我是该图书馆的项目经理。下面是例子来源:

IPAddressString ipAddrString = new IPAddressString("fe80::8b2:d61e:e5c:b333%15"); 
IPAddress addr = ipAddrString.getAddress(); 
if(addr.isIPv6()) { 
    IPv6Address ipv6Addr = addr.toIPv6(); 
    String zone = ipv6Addr.getZone(); 
    IPv6Address noZoneAddr = new IPv6Address(ipv6Addr.getBytes()); 
    System.out.println(zone); 
    System.out.println(noZoneAddr); 
} 

输出:

15 
fe80::8b2:d61e:e5c:b333