2012-03-04 31 views
6
public class InetAddresTest { 
    public static void main(String ... agrs) { 
     try { 
      InetAddress inet = InetAddress.getByName("1.2"); 
      System.out.println("Good ip address"); 
     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

BTW InetAddress是否產生IP地址回來爲 「1.0.0.2」。我無法從InetAddress的javadoc中找到合理的答案。你能解釋一下這種行爲嗎?InetAddress.getByName(「1.2」)是如何得到有效的IP地址?

+1

布賴恩是當場就與他的回答。如果你的目標是驗證IP地址,那麼我建議你使用Apache-Commons [InetAddressValidator](http://commons.apache.org/validator/apidocs/org/apache/commons/validator/routines/InetAddressValidator.html) – CoolBeans 2012-03-04 17:21:13

+1

@ CoolBeans - 在答案中加上了一個替代方案 - 謝謝。 – 2012-03-04 17:49:50

+0

僅當您驗證IPv4時,Apache Commons InetAddressValidator才能提供幫助,因爲當前版本(1.4)似乎不支持IPv6。 – Douglas 2013-01-03 21:45:26

回答

7

Javadoc(在Javadoc for InetAddress「的IP地址的文本表示」相連):

當提供兩個部分地址,最後一部分被解釋爲一個24位的數量和放置在網絡地址的最右邊三個字節。這使得兩部分地址格式便於將A類網絡地址指定爲net.host。

編輯補充:萬一24bit的部分會搞亂你:

2在24位會是什麼樣子:00000000 00000000 00000010

,然後在IPv4映射到右邊3個字節地址爲:.0.0.2

One More:正如CoolBeans在您的問題的評論中提到的那樣,InetAddressValidator來自阿帕奇的公共會做伎倆。話雖這麼說,如果你只是想驗證IP地址,沒有外部的依賴,你可以使用Regular Expressions to check IP addresses as well