匹配IPv4和IPv6地址但不是主机名?

时间:2012-02-23 08:35:00

标签: java ipv6 ipv4

我想检查字符串是IPv4还是IPv6地址,但是没有其他地址。有没有办法用标准的java库来实现这个目的?

我知道:

  • InetAddress.getByName(str) - 但它接受主机名
  • IPAddressUtil.isIPv4LiteralAddress(str) - 但它是一个内部类,会给出编译器警告

我知道我可以使用正则表达式,但我更喜欢使用现有方法。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

在C中执行此操作的方法是使用inet_pton()。您可以将代码移植到Java。 (或者使用一些非常复杂的正则表达式,因为匹配IPv6地址并不简单。)

您可以查看this question中的正则表达式并更改它,使其与主机名不匹配,如果您感觉很勇敢的话。 ; - )

答案 2 :(得分:0)

The IPAddress Java library以多态方式支持IPv4和IPv6。它有方法来做你正在描述的事情。

这是解决您问题的sample code

以下是更多示例代码:

IPAddressString ipString = new IPAddressString("ipv4 or ipv6 address string goes here");
System.out.println("IPv4: " + ipString.isIpV4() + " IPv6: " + ipString.isIpV6()); 

答案 3 :(得分:-1)

简单的经验法则是,如果地址是x.x.x.x.x.x.x.x,那么它是一个IPV6地址......尝试查看类Inet4Address和Inet6Address。