2012-02-23 258 views
3

我想檢查一個字符串是一個IPv4還是IPv6地址,但沒有別的。有什麼辦法可以使用標準的java庫來完成這個任務嗎?匹配IPv4和IPv6地址,但不是主機名?

我知道的:

  • InetAddress.getByName(STR) - 但它接受主機名
  • IPAddressUtil.isIPv4LiteralAddress(STR) - 但它是一個內部類,並給編譯器警告

我知道我可以使用正則表達式,但我更喜歡使用現有的方法。

+0

我想我們可以同意,沒有標準(如,包括默認情況下)實現這一點的方式。我最終做的是通過一個草率的IPv4 | 6正則表達式來運行假定的IP地址(以排除任何不像有效IP地址的東西),然後在地址上調用InetAddress.getByName(str)。 – honeyp0t 2012-02-28 07:40:07

回答

-1

簡單的經驗法則是,如果地址是x.x.x.x.x.x.x.x那麼它的IPV6地址...嘗試查看類Inet4Address和Inet6Address以及。

+0

ITYM x:x:x:x:x:x:x:x – glglgl 2012-02-23 09:19:25

+0

當然,不過這裏有簡短的表格(跳過零),回送地址等。 – honeyp0t 2012-02-23 09:23:05

1

在C做到這一點的方法是使用inet_pton()。您可以將代碼移植到Java。 (或者使用一些非常複雜的正則表達式,因爲匹配IPv6地址並不簡單。)

您可以看看this question中的正則表達式,並將其更改爲與主機名不匹配,如果您感覺勇敢。 ;-)

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());