我想檢查一個字符串是一個IPv4還是IPv6地址,但沒有別的。有什麼辦法可以使用標準的java庫來完成這個任務嗎?匹配IPv4和IPv6地址,但不是主機名?
我知道的:
- InetAddress.getByName(STR) - 但它接受主機名
- IPAddressUtil.isIPv4LiteralAddress(STR) - 但它是一個內部類,並給編譯器警告
我知道我可以使用正則表達式,但我更喜歡使用現有的方法。
我想檢查一個字符串是一個IPv4還是IPv6地址,但沒有別的。有什麼辦法可以使用標準的java庫來完成這個任務嗎?匹配IPv4和IPv6地址,但不是主機名?
我知道的:
我知道我可以使用正則表達式,但我更喜歡使用現有的方法。
在C做到這一點的方法是使用inet_pton()。您可以將代碼移植到Java。 (或者使用一些非常複雜的正則表達式,因爲匹配IPv6地址並不簡單。)
您可以看看this question中的正則表達式,並將其更改爲與主機名不匹配,如果您感覺勇敢。 ;-)
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());
我想我們可以同意,沒有標準(如,包括默認情況下)實現這一點的方式。我最終做的是通過一個草率的IPv4 | 6正則表達式來運行假定的IP地址(以排除任何不像有效IP地址的東西),然後在地址上調用InetAddress.getByName(str)。 – honeyp0t 2012-02-28 07:40:07