Вирішення ip-адреси імені хосту


86

У мене є IP-адреса DNS-сервера та ім’я хосту.

За допомогою Java, як я можу знайти IP-адресу імені хосту, яку повертає цей DNS-сервер, використовуючи IP-адресу та ім'я хосту?


3
dig <hostname>у командному рядку?
ceejayoz,

Як зробити те саме в коді Java і де я повинен використовувати IP-адресу DNS-сервера та ім'я хосту.
Dark Matter

Ще один запит - нам у будь-якому випадку потрібно буде вказати ip-адресу DNS-сервера або він спробує її знайти за замовчуванням. Я тут трохи заплутався, чи потрібно нам також використовувати лише ім’я хосту чи ім’я хосту + ip-адресу dns-сервера?
Dark Matter

1
Пошук адреси з використанням імені не є складним. Поки ви просто використовуєте системний засіб вирішення проблем за замовчуванням. Отже: вам справді потрібно використовувати адресу DNS-сервера?
AH

У мене таке саме запитання: чи справді мені потрібна адреса DNS-сервера, чи він вирішить цю адресу за замовчуванням. До речі, я використовую сервер AIX Unix.
Dark Matter

Відповіді:


128

Погляньте InetAddressі getHostAddress()метод.

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

Скажімо, якщо у мене є ip-адреса dns 10.37.221.152 і ім’я хоста, скажіть "www.student.com", то як я можу знайти ip-адресу.
Dark Matter

3
@DarkMatter: InetAddressповинен отримати адресу DNS, коли ви запитуєте getHostAddress(). Я не впевнений, що ви можете змусити його використовувати певний DNS-сервер.
thegrinner

Отже, він в ідеалі повинен вирішувати сам, без програміста, який прямо вказав адресу DNS-сервера, чи не так?
Dark Matter

1
@DarkMatter Так. Я вважаю, що він використовує будь-який DNS-сервер, встановлений на самому комп'ютері.
thegrinner

29

Ви можете зробити це так:

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

9

Для цього ви можете використовувати InetAddress. Спробуйте нижченаведений код,

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

3

Як пропонується всім вище, ви можете використовувати, InetAddress.getByName("hostName")але це може дати вам кешований IP-адрес. Прочитайте документацію до Java для того самого. Якщо ви хочете отримати IP-адресу від DNS, ви можете використовувати:

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

На додаток до того, що вказав @daksh, ви можете відключити кеш DNS-відповідей, як запропоновано тут, але пам’ятайте про час вимкнення кешу, а також кешування DNS-відповідей, зроблених вашою ОС, а також іншими DNS-серверами, як пропонується тут . Сподіваюся, це допомагає
CrazyGreenHand

З якоїсь причини цей дзвінок дає мені позитивний результат для будь-якого імені хосту. Я думав, що за замовчуванням використовую свій IP, але ні, це дає мені певний IP для будь-якого невідомого хоста.
Імаскар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.