我想檢查字符串是否是Java中的主機名或IP地址。有沒有一個API來做到這一點,或者我必須自己寫一個解析器?檢查字符串是否是Java中的主機名或IP地址
問題很複雜,因爲有IPv4地址,短期和長期IPv6地址,短主機名和FQDN主機名。
我想檢查字符串是否是Java中的主機名或IP地址。有沒有一個API來做到這一點,或者我必須自己寫一個解析器?檢查字符串是否是Java中的主機名或IP地址
問題很複雜,因爲有IPv4地址,短期和長期IPv6地址,短主機名和FQDN主機名。
雖然理論上你就可以編寫規則來自己處理這些情況下,使用的RFCstheusualcadre,我不是看the entirety of this class in Google Guava,尤其是例如它如何解決嵌入4合6地址的問題。
至於確定您是否有FQDN,請查看強制IP地址是否失敗,然後嘗試根據DNS解析它。根據您的輸入案例,其他任何內容都應該是主機名或本地解決方案,而不是完全限定的。
在JDK API中不可能,但是您可以使用中的InetAddresses.forString
,當參數不是IP字符串文字時,會引發異常。
似乎沒有API,但編寫這樣的函數似乎並不是很困難。您可以檢查以下條件在代碼:
The IPAddress Java library會做到這一點。 javadoc可在鏈接中找到。免責聲明:我是項目經理。
static void check(HostName host) {
try {
host.validate();
if(host.isAddress()) {
System.out.println("address: " + host.asAddress());
} else {
System.out.println("host name: " + host);
}
} catch(HostNameException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
HostName host = new HostName("1.2.3.4");
check(host);
host = new HostName("1.2.a.4");
check(host);
host = new HostName("::1");
check(host);
host = new HostName("[::1]");
check(host);
host = new HostName("1.2.?.4");
check(host);
}
輸出:
address: 1.2.3.4
host name: 1.2.a.4
address: ::1
address: ::1
1.2.?.4 Host error: invalid character at index 4
它看起來並不像番石榴的類指示一個字符串是否包含一個主機名(非IP地址)。 – Gili 2017-02-17 02:13:42