Rozwiązywanie adresu IP nazwy hosta

86

Mam adres IP serwera DNS i nazwę hosta.

Jak przy użyciu języka Java mogę znaleźć adres IP nazwy hosta zwrócony przez ten serwer DNS przy użyciu adresu IP i nazwy hosta?

Ciemna materia
źródło
3
dig <hostname>w linii poleceń?
ceejayoz
Jak zrobić to samo w kodzie java i gdzie powinienem użyć adresu IP i nazwy hosta serwera DNS.
Dark Matter
Kolejne zapytanie będzie musiało w każdym przypadku podać adres IP serwera DNS, czy też spróbuje go znaleźć domyślnie. Jestem trochę zdezorientowany, czy potrzebujemy również użyć tylko nazwy hosta lub nazwy hosta + adres IP serwera dns?
Dark Matter
1
Wyszukiwanie adresu za pomocą nazwy nie jest skomplikowane. Tak długo, jak używasz domyślnego programu rozpoznawania nazw systemu. A więc: czy naprawdę musisz używać adresu serwera DNS?
AH
Mam to samo pytanie: Czy naprawdę potrzebuję adresu serwera DNS, czy też adres zostanie rozwiązany domyślnie. BTW Używam serwera AIX Unix.
Dark Matter

Odpowiedzi:

127

Spójrz na InetAddressi getHostAddress()metodę.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
thegrinner
źródło
Powiedz, że jeśli mam adres IP DNS 10.37.221.152 i nazwę hosta, powiedz „www.student.com”, to jak mogę znaleźć adres IP.
Dark Matter
3
@DarkMatter: InetAddresspowinien otrzymać adres rozpoznany przez DNS, gdy o to poprosisz getHostAddress(). Nie jestem jednak pewien, czy możesz zmusić go do korzystania z określonego serwera DNS.
thegrinner
Musi więc w idealnym przypadku rozwiązać się sam bez podania przez programistę adresu serwera DNS, prawda?
Dark Matter
1
@DarkMatter Yes. Uważam, że używa dowolnego serwera DNS ustawionego na samym komputerze.
thegrinner
29

Możesz to zrobić w ten sposób:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());
Walery Strauch
źródło
9

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

InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address.getHostAddress());
System.out.println(address.getHostName());
Abhinaba Basu
źródło
3

Jak sugerowano powyżej, możesz użyć, InetAddress.getByName("hostName")ale może to dać ci buforowany adres IP, Przeczytaj dokumentację java dla tego samego. Jeśli chcesz uzyskać adres IP z DNS, możesz użyć:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
daksh
źródło
Oprócz tego, co wskazał @daksh, możesz wyłączyć pamięć podręczną odpowiedzi DNS, jak sugerowano tutaj, ale pamiętaj o czasie wyłączania pamięci podręcznej, a także buforowaniu odpowiedzi DNS wykonanych przez system operacyjny, a także inne serwery DNS, jak sugerowano tutaj . Mam nadzieję, że to pomoże
CrazyGreenHand
Z jakiegoś powodu ta rozmowa daje mi pozytywny wynik dla dowolnej nazwy hosta. Myślałem, że domyślnie używam mojego adresu IP, ale nie, daje mi to określony adres IP dla dowolnego nieznanego hosta.
Imaskar