2010-02-22 9 views

Odpowiedz

17

com.google.common.net.InetAddresses.forString(String ipString) jest lepsze dla tego, ponieważ nie zrobi wyszukiwanie DNS, niezależnie od tego, co łańcuch jest przekazywany do niego.

+0

To jest część [Guawy] (http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/net/InetAddresses.html). –

+0

Powinien to być "com.google.common.net.InetAddresses.forString' (z' InetAddresses' z wielką literą A). SO nie pozwoli mi to poprawić w Twojej odpowiedzi, ponieważ edycja musi składać się z co najmniej 6 znaków. ;-) W każdym razie, dziękuję, szukałem tego i jeszcze raz Guava ratuje dzień. – silmeth

13

Tak, to zadziała. The API jest bardzo jasne na ten temat ("Nazwa hosta może być nazwą komputera, na przykład" java.sun.com "lub tekstową reprezentacją jego adresu IP.") I oczywiście można łatwo sprawdzić samemu.

+1

Dzięki, spojrzałem w górę api i nieodebranych tej linii. – TiansHUo

+0

Co jeśli host ma wzorzec podobny do 192.168.0. *? Czy to też zadziała? Odnośnie do dokumentu Inet4Address wydaje się, że jest to wsparcie. – Paranaix

+0

@Paranaix, nie, rzuci "IllegalArgumentException" z komunikatem "Niepoprawna specyfikacja hosta" –

3

uwaga: wydaje się, że podczas analizowania nieprawidłowy adres, takie jak InetAddress.getByName("999.999.999.999") będzie nie wynik w drodze wyjątku, jak można by oczekiwać od frazy dokumentacji jest:

ważność formacie adresu sprawdza

empirycznie, ja znajduję się coraz instancję InetAddress z surowego adresu IP komputera lokalnego i nieprawidłowy adres IP jako nazwę hosta. Z pewnością nie tego oczekiwałem!

+2

Od wersji Java 7 spowoduje to wygenerowanie wyjątku UnknownHostException; nie sprawdziłem wcześniejszego JavaScriptu, ale spodziewałbym się tam również wyjątku. –

0

The open-source IPAddress Java library zweryfikuje wszystkie standardowe reprezentacje IPv6 i IPv4 i zrobi to bez wyszukiwania DNS. Zastrzeżenie: jestem kierownikiem projektu tej biblioteki.

Poniższy kod zrobi co prosisz:

 String s = "1.2.3.4"; 
    try { 
      IPAddressString str = new IPAddressString(s); 
      IPAddress addr = str.toAddress(); 
      InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6 
      if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific 
       IPv4Address ipv4Addr = addr.toIPv4(); 
       Inet4Address inetAddr = ipv4Addr.toInetAddress(); 
       //use address 
      } 
     } catch(AddressStringException e) { 
      //e.getMessage has validation error 
     } 
Powiązane problemy