2013-04-03 22 views
65

Mam adres IP serwera DNS i nazwę hosta.Rozpoznawanie adresu IP nazwy hosta

Przy użyciu języka Java, w jaki sposób mogę znaleźć adres IP nazwy hosta zwracanej przez ten serwer DNS przy użyciu adresu IP i nazwy hosta?

+2

'dig ' w wierszu polecenia? – ceejayoz

+0

Jak zrobić to samo w kodzie Java i gdzie powinienem używać adresu ip serwera DNS i nazwy hosta. –

+0

Innego zapytania będziemy musieli podać adres IP serwera DNS w każdym przypadku lub spróbuje go znaleźć domyślnie. Jestem nieco zdezorientowany, czy potrzebujemy używać tylko nazwy hosta lub nazwy hosta + adres IP serwera DNS ? –

Odpowiedz

86

Spójrz na InetAddress i metodę getHostAddress().

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
+0

Powiedz, że jeśli mam adres IP dns 10.37.221.152, a nazwa hosta to "www.student.com", to w jaki sposób mogę znaleźć adres IP. –

+2

@DarkMatter: 'InetAddress' powinien uzyskać adres rozstrzygnięty DNS, gdy poprosisz o' getHostAddress() '. Nie jestem pewien, czy możesz wymusić na nim użycie * konkretnego * serwera DNS. – thegrinner

+0

Musi więc idealnie rozwiązać samodzielnie, bez konieczności podawania przez programistę adresu serwera DNS wprost? –

8

Możesz użyć InetAddress do tego. Wypróbuj poniższy kod,

InetAddress address = InetAddress.getByName("www.yahoo.com"); 
System.out.println(address.getHostAddress()); 
System.out.println(address.getHostName()); 
22

Można to zrobić tak:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com")) 
    System.out.println(addr.getHostAddress()); 
4

Jak sugeruje wszystko powyżej, można użyć InetAddress.getByName("hostName") ale może to dać pamięci podręcznej IP, przeczytaj dokumentację java za to samo. Jeśli chcesz uzyskać IP z serwera DNS można użyć:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName"); 
+0

Z jakiegoś powodu to połączenie daje mi pozytywny wynik dla każdej nazwy hosta. Myślałem, że domyślam się na mój adres IP, ale nie, to daje mi pewne konkretne IP dla każdego nieznanego hosta. – Imaskar

2

Oprócz tego, co @daksh wskazał, można wyłączyć pamięć podręczną DNS odpowiedzi jako sugerowane here jednak zdawać sobie sprawę z terminów wyłączenia cache oraz buforowanie odpowiedzi DNS tworzonych przez Twój system operacyjny, a także inne serwery DNS zgodnie z sugestią here. Mam nadzieję, że to pomaga

Powiązane problemy