2012-03-31 76 views

回答

2

雖然理論上你就可以編寫規則來自己處理這些情況下,使用的RFCstheusualcadre,我不是看the entirety of this class in Google Guava,尤其是例如它如何解決嵌入4合6地址的問題。

至於確定您是否有FQDN,請查看強制IP地址是否失敗,然後嘗試根據DNS解析它。根據您的輸入案例,其他任何內容都應該是主機名或本地解決方案,而不是完全限定的。

+0

它看起來並不像番石榴的類指示一個字符串是否包含一個主機名(非IP地址)。 – Gili 2017-02-17 02:13:42

2

在JDK API中不可能,但是您可以使用中的InetAddresses.forString,當參數不是IP字符串文字時,會引發異常。

5

似乎沒有API,但編寫這樣的函數似乎並不是很困難。您可以檢查以下條件在代碼:

  1. 如果sourceStr含有「:」但沒有「」 - > IPv6
  2. 如果sourceStr.matches(「^。[0-9] {1,3}/.. [0-9] {1,3}/.. [0-9] {1,3} /..[0-9]{1,3}「)== true) - > IPv4
  3. 如果sourceStr包含」。「 - > FQDN主機名
  4. 否則,它必須是一個短的主機名
0

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 
相關問題